Base R-函数的一般问题-输出具有输入名称的变量

时间:2018-10-17 17:02:56

标签: r

是否可以为要在函数中输出的变量编写输入名称?我目前有一个非常简单的示例:

power <- function(value1,value2) {
  sumValues <<- value1 + value2
}
power(value1 = 2, value2 = 3)

哪个返回变量调用sumValues和答案。 我正在尝试执行以下操作:

power <- function(value1,value2,Variable_name) {
  Variable_name <<- value1 + value2
}
power(value1 = 2, value2 = 3, Varieble_name = SumofValues)

在我命名的变量之后,我将返回一个变量,在这种情况下为SumofValues。

很抱歉,这是一个愚蠢的问题,我在搜索后找不到答案,或者更确切地说,我不知道如何查找。

3 个答案:

答案 0 :(得分:2)

这只是一个assign的把戏。参见help("assign")

power <- function(value1, value2, Variable_name) {
  Variable_name <- as.character(substitute(Variable_name))
  assign(Variable_name, value1 + value2, envir = .GlobalEnv)
}

power(value1 = 2, value2 = 3, Variable_name = SumofValues)

SumofValues
#[1] 5

请不要使用<<-,除非您有非常非常好的理由这样做。即使在这种情况下,也请确保您不尝试解决XY problem

答案 1 :(得分:1)

正如Rui所说,使用<<-是一个坏主意。但是您甚至不需要assign()。只需按照通常的方式写作业即可:

power <- function(value1,value2) {
  value1 + value2
}
SumofValues <- power(value1 = 2, value2 = 3)

如果您有很多不同的名称,请使用它们来命名列表中的元素。例如,

names <- c("SumofValues", "OtherName")
result <- list()
result[[names[1]]] <- power(2, 3)
result[[names[2]]] <- power(3, 4)

答案 2 :(得分:0)

您可以使用eval(parse(text=))来完成此操作。

power <- function(value1,value2,Variable_name) {
  textpar <- paste0(Variable_name," <<- ",value1," + ",value2)
  eval(parse(text = textpar))
}
power(value1 = 2, value2 = 3, Variable_name = "SumofValues")
SumofValues
5