Я хотел бы сохранить входные данные / команды внутри функции в качестве комментария в конце функции. См. Пример ниже.

Name1 <- c(1, 2, 3)
Name2 <- c(4, 5, 6)

addition <- function(x, y){
  z <- x + y
  comment(z) <- paste(x, y)
  z
}
z <- addition(x=Name1, y=Name2)
comment(z)

Я хочу, чтобы на выходе comment(z) было Name1 Name2.

r
1
Gorp 5 Окт 2020 в 14:03

1 ответ

Лучший ответ

Сохраните комментарий как атрибут «комментарий».

В R уже есть следующие функции для атрибутов «комментарий», но вы можете определить их самостоятельно, например, если вы хотите назвать атрибут по-другому. Преимущество встроенного атрибута comment в том, что print его не печатает. Недостатком является то, что его содержание ограничено текстом.

##assignment function
#"comment<-" <- function(x, value) {
#  attr(x, "comment") <- value
#  x
#}
#
##accessor function    
#comment <- function(x) attr(x, "comment")

Затем вам нужно подставить аргументы в paste:

addition <- function(x, y){
  z <- x + y
  comment(z) <- paste(substitute(x), substitute(y))
  z
}
z <- addition(x=Name1, y=Name2)
comment(z)
#[1] "Name1 Name2"

Лично я бы предпочел comment(z) <- deparse(match.call()).

2
Roland 5 Окт 2020 в 11:22