2015-11-10 46 views
-1

我可以用这种方式合并数据:为什么合并不能在for循环中工作?

total<-rare8000 
total<-merge(total,rare9000,by="sampleID") 
total<-merge(total,rare10000,by="sampleID") 
total<-merge(total,rare11000,by="sampleID") 
total<-merge(total,rare12000,by="sampleID") 

我得到了我想要的结果。

但我不能这样合并:因为它与下面的错误结束

total<-rare8000 
for(i in seq(9000,12000,by=1000)) { 
    temp<-paste0("rare",i) 
    total<-merge(total,temp,by="sampleID") 
} 

Error in fix.by(by.y, y) : 'by' must specify a uniquely valid column

问题是什么?任何人都可以告诉我上面两段代码的区别吗?

回答

0

在循环你做

temp <- paste0("rare",i) 

这将创建一个名为temp与价值 “rare9000” 的字符串对象。这不等同于名为rare9000对象(这大概是一个data.frame或矩阵)

你可以尝试:像rare9000

x <- 2 
'x' 
# [1] "x" 
eval(parse(text='x')) 
# [1] 2 

有对象:

temp <- eval(parse(text=paste0("rare",i))) 

因为,rare10000等是编程不佳的标志。您应该创建一个列表,以便您不需要首先按名称调用这些列表。为了得到更好的帮助,你应该提供一个更完整的例子。

+0

我明白了。非常感谢。我只是发现“分配”将返回与“eval”相同的结果。 – Ming