2013-10-18 60 views
0

我有一個名爲listed對象的列表。每個人都有不同的數據,我想合併成一個名爲result的對象,之前創建。我創建了一個我想合併所有數據的循環。但是,當我想要把裏面的函數對象不起作用函數裏面插入的對象在一個循環中

for (l in 1:length(listed)){ 
     result <- merge(result, listed[[l]], by.x="GOterm", by.y="GO.ID", all=TRUE) 
    } 

而如果我用,而不是物體內部

上市[[1]]

數據

result <- merge(result, data, by.x="GOterm", by.y="GO.ID", all=TRUE) 

它運作良好。

我怎樣才能爲合併功能,插入一個有效的對象名?

+0

歡迎SO!您的代碼格式不正確。而且,如果它不起作用,錯誤信息是什麼? – juba

+0

對不起,我不知道如何將它正確地格式化,我的錯誤信息是:'錯誤fix.by(by.y,Y):「通過」必須指定一個唯一有效的column' – Llopis

回答

0

錯誤消息告訴您listed中的某些項目沒有GO.ID列。你可以做哪些建議:

which(!mapply(`%in%`, list("GO.ID"), lapply(listed, names))) 

解決您的數據和您預期的for循環應該工作。


下面是一個例子:

listed <- list(data.frame(GO.ID = 1:3, v2 = 4:6), 
       data.frame(GO.ID = 1:3, v2 = 4:6), 
       data.frame(GO.id = 1:3, v2 = 4:6)) 

which(!mapply(`%in%`, list("GO.ID"), lapply(listed, names))) 
# [1] 3 

編輯:按照下面的評論,似乎listed是變量的名稱,例如列表listed <- list("data", "data2", "data3")。所以答案應該是:

for (l in 1:length(listed)) { 
    result <- merge(result, get(listed[[l]]), by.x="GOterm", by.y="GO.ID", all=TRUE) 
} 

或更好:

for (df in mget(unlist(listed))) { 
    result <- merge(result, df, by.x="GOterm", by.y="GO.ID", all=TRUE) 
} 
+0

我想我還沒有表達好吧,這些數據在列表中,並且是唯一的項目,它有一個GO.ID列。因此,當我申請你行我得到這個 '這(!mapply('%在%',列表( 「GO.ID」),lapply(上市名稱))) [1] 1' 當我做'name(data)'我得到'[1]「GO.ID」「Sort」「Compressed」'。所以它在 – Llopis

+0

裏面,這是告訴你'列出'裏面的第一項看起來不像'data'。它缺少一個'GO.ID'列。你可以做'名字(列出[[1]]',你會看到它......如果這還沒有回答你的問題,請提供'str(列出)'的輸出,你可以將它粘貼在底部你的問題。 – flodel

+0

當然,因爲它讀取只是一個字符不是對象。 '名(上市[[1]])NULL'這就是爲什麼我問是否有從對象 – Llopis