字符串到R中的变量名

字符串到R中的变量名,r,string-concatenation,R,String Concatenation,我正在清理一个数据集,需要根据另一个变量选择变量。假设如果ID=1,我需要在数据帧中引入变量VAR01,如果ID=2,我需要VAR02,依此类推 因此,我正在做一个for循环,其中我使用stringf函数将变量名“VAR”与ID号粘贴在一起。问题是我需要R来理解作为函数名的字符串 我在论坛中发现了这个解决方案,但它对我不起作用: > variable1 = c("monday", "tuesday", "wednesday") > var_name = "variable1" &

我正在清理一个数据集,需要根据另一个变量选择变量。假设如果
ID=1
,我需要在数据帧中引入变量
VAR01
,如果
ID=2
,我需要
VAR02
,依此类推

因此,我正在做一个for循环,其中我使用
stringf
函数将变量名“VAR”与ID号粘贴在一起。问题是我需要R来理解作为函数名的字符串

我在论坛中发现了这个解决方案,但它对我不起作用:

> variable1 = c("monday", "tuesday", "wednesday")

> var_name = "variable1"

> eval(parse(text=var_name))
[1] "monday"    "tuesday"   "wednesday"
问题是我不能使用它来引用变量:

> eval(parse(text=var_name)) = c(1,2,3)
Error in file(filename, "r") : cannot open the connection
In addition: Warning message:
In file(filename, "r") :
cannot open file 'variable1': No such file or directory
有人有解决办法吗


谢谢

您可以使用
get

result = get(var_name)
尽管大量使用
get
set
表明您可能希望开始使用
列表
变量:

l = list(variable1 = c(1,2,3))
l$variable1 = c(4,5,6) 
您可以使用
assign()

调用函数会在函数中指定
my_var
值5,该函数的环境仅在函数运行和销毁时创建

> myfun("my_var")
# [1] 5

> my_var
# Error: object 'my_var' not found
因此,如果希望在函数调用后保留该值,则必须指定一个环境,在任务运行期间,该环境将具有该变量。例如,在
全局环境中

myfun <- function(var, env = globalenv()) {
    assign(eval(substitute(var)), 5, envir = env)
    print(get(var))
}

> myfun("my_var")
# [1] 5
>  my_var
# [1] 5
myfun myfun(“我的变量”)
# [1] 5
>我的
# [1] 5
这是常见问题解答7.21

FAQ最重要的部分是它告诉您使用列表,而不是在全局环境中使用列表。您提到希望在数据帧(已经是一个列表)中执行此操作,因此这变得更简单。尝试以下方法:

mydf <- data.frame( g=c('a','b','c') )
ID <- 1

mydf[[ sprintf("VAR%02d",ID) ]] <- 1:3
mydf

mydf我想他想把1、2、3分别分配到星期一、星期二和星期三。。?不确定,如果我没有弄错的话。这正是标题所说的,OP在这种情况下应该使用列表。您能试着给出一个示例,说明您的数据是什么,以及所需的输出吗?
assign
函数将不容易分配到数据框中(如问题的第一部分所述)。另请参见《财富》(236)
+1了解:如果答案是parse(),您通常应该重新思考这个问题-Thomas Lumley-R-help(2005年2月)
myfun <- function(var, env = globalenv()) {
    assign(eval(substitute(var)), 5, envir = env)
    print(get(var))
}

> myfun("my_var")
# [1] 5
>  my_var
# [1] 5
mydf <- data.frame( g=c('a','b','c') )
ID <- 1

mydf[[ sprintf("VAR%02d",ID) ]] <- 1:3
mydf