如何通过粘贴在函数中创建变量名

时间:2019-06-18 09:56:22

标签: r function paste

我正在尝试在R中的一个函数内创建一个变量,但是该变量的名称取决于该函数的参数,因此我想使用粘贴对其进行命名。

我将举例说明我的意思

variable <- function(name){
assign(paste0("variable_",name),1)
}
variable("one")
variable_one

如何使用assign命令,以便可以在函数外部访问变量?我的意思是,当我使用variable_one时会得到1(我知道使用<<-,但不会使用assign)。
任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您真的需要使用assign吗?

您可以将它们返回为list

,而不是用全局变量使环境混乱
variable <- function(name){
   setNames(list(1), paste0("variable_", name))
}

variable("two")
#$variable_two
#[1] 1

如果要使其更通用,可以这样做

variable <- function(name){
   setNames(as.list(rep(1, length(name))), paste0("variable_", name))
}

lst1 <- variable(c("two", "three"))

,然后使用[[

访问各个值
lst1[["variable_two"]]
#[1] 1
lst1[["variable_three"]]
#[1] 1

答案 1 :(得分:1)

要在函数外部更改变量,您需要为envir指定assign参数。

这将为您带来理想的结果。

variable <- function(name) {
    assign(paste0("variable_", name), 1, envir = parent.frame())
}

但是,使用其他解决方案(如Ronak Shah的建议)几乎总是更好的选择,因为如果您过多地使用诸如此类的东西,事情会很快变得混乱。

考虑(使用上述功能):

variable_two <- "twenty"
variable("two")

这将覆盖variable_two而不会发出警告,有可能导致问题进一步恶化。