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