我可以用这种方式合并数据:
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'必须指定唯一的 有效栏
有什么问题?谁能告诉我上面两段代码之间的区别呢?
答案 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
拥有rare9000
,rare10000
等对象是糟糕编程的标志。您应该创建一个列表,这样您就不需要首先按名称调用它们。为了获得更好的帮助,您应该提供更完整的示例。