我想知道如何使用粘贴创建变量名称(已存在的变量),然后访问此变量。
示例:
var<-c("A","B","C")
for (i in 1:3){
paste0("var")[i]
}
注意:假设我需要使用paste0
来创建变量名称(我正在处理data.frames并使用paste0
来创建不同列的变量)
谢谢!
编辑:
好的,这是更大的图片:
我有两个数据框:smallDF
和bigDF
。我想将数据从bigDF复制到smallDF。匹配是使用user_name
。
user <- c("userA","userB","userC")
variables<-c("user_age","user_city","user_street")
for (t in 1:length(variables)){
for (j in 1:length(user)){
x<-paste0("bigDF$",variables[t])
y<-paste0("smallDF$",variables[t])
tmp<-unique(x[which(bigDF$user_name==user[j])])[1] # unique will only yield one entry
replace<-c(as.character(rep(tmp,length(y[which(smallDF$user_name==user[j])]))))
y[which(smallDF$user_name==user[j])]<-replace
}
}
上面的代码不起作用。但是,当我避开第一个for循环并用相应的变量名(bigDF $ user_age等)替换x和y时,一切正常。这就是为什么我认为必须有一个简单的方法来使用外部for循环动态创建这些变量名称。 谢谢大家!
答案 0 :(得分:3)
首先查看帮助?"[["
,然后查看fortune(312)
。问题是你在线上的某个地方学到了神奇的$
快捷方式而没有正确地了解它是什么的快捷方式,并且觉得你需要在2点之间的最长距离的情况下使用快捷方式(有点像使用纽约市和波士顿之间的捷径,试图从伦敦到巴黎)。
如果您使用bigDF[[ variables[t] ]]
之类的代码而不是尝试使用$
,则会访问bigDF
的列,其名称当前位于variables[t]
。
学会正确使用[[
和其他子集(仅在适当情况下使用$
),您的整个过程将大大简化。
答案 1 :(得分:0)
解决方案:
dat <- eval(parse(text="paste0"))
dat 中的你有输出。