0

我有一个名为的对象列表listed。每个都有不同的数据,我想将它们合并到一个result之前创建的名为 的对象中。我创建了一个循环,我想在其中合并所有数据。但是当我想将对象放在函数中时它不起作用

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

而如果我使用而不是里面的对象

列出[[l]]

数据

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

它运作良好。

如何为合并函数插入有效的对象名称?

4

1 回答 1

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) 
}
于 2013-10-18T11:21:16.047 回答