2015-11-10 44 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