字符串循环以在R中形成变量名称

时间:2014-06-26 23:01:39

标签: r

calld=data.frame(matrix(rnorm(100*50,0,1),1000,50))

for (x in names(calld)) {
   assign(paste("calld$",x,sep=""),pnorm(get(paste("calld$",x,sep="")),0,1,lower.tail=T,log.p=F))
    }
Error in get(paste("calld$", x, sep = "")) : object 'calld$X1' not found

我是否正确使用get功能?我试图通过循环粘贴数据集的名称,并通过将值传递给pnorm(累积正态分布函数)来粘贴它的现有值。但我不断收到错误。当我在" calld"中调用变量名称时,该函数有效。数据帧。问题是创建循环的集中过程。我哪里错了?感谢您的帮助

更新::

我接受了你们的建议,然后重新编写了循环。

for (n in names(calld)) {

get("calld")[[n]]=pnorm(get("calld")[[n]],0,1,lower.tail=T,log.p=F)

}

Error in get("calld")[[n]] = pnorm(get("calld")[[n]], 0, 1, lower.tail = T,  : 
  target of assignment expands to non-language object

但现在我收到了这个新错误。所以当我测试它时,环路中等式右边的所有东西都可以工作。当我将其设置为等于其自身的值时,会出现错误,从而替换先前的值。

1 个答案:

答案 0 :(得分:4)

怜悯小猫!

您不能以这种方式使用assign,也不能get

 calld[] <- lapply(calld, pnorm, mean = 0, sd = 1)

解释:calld[]<-替换calld的所有现有列(同时将结构保留为data.frame),其结果为lapply(calld, pnorm, mean = 0, sd = 1),其遍历{{1}的所有列1}},对每一个都应用calld

pnorm
  

这里的问题是$符号是一个神奇的快捷方式,就像任何其他魔法一样,如果使用不当可能会使程序相当于将自己变成蟾蜍。

     

- Greg Snow(回应想要访问名称通过x $ y而不是x [[y]]存储在y中的列的用户)

     

R-help(2012年2月)