为什么合并不能在for-loop中工作?

时间:2015-11-10 03:02:16

标签: r

我可以用这种方式合并数据:

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")
}

结束时出现以下错误:

  

fix.by(by.y,y)出错:'by'必须指定唯一的   有效栏

有什么问题?谁能告诉我上面两段代码之间的区别呢?

1 个答案:

答案 0 :(得分:0)

在循环中你做

  temp <- paste0("rare",i)

创建一个名为temp的字符串对象,其值为&#34; rare9000&#34;。这不等同于名称为rare9000的对象(可能是data.frame或matrix)

你可以尝试:

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

由于:

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

拥有rare9000rare10000等对象是糟糕编程的标志。您应该创建一个列表,这样您就不需要首先按名称调用它们。为了获得更好的帮助,您应该提供更完整的示例。