字符串到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