在循环中的函数内插入对象

时间:2013-10-18 09:59:33

标签: r merge

我有一个名为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) 

效果很好。

如何为合并功能插入有效的对象名称?

1 个答案:

答案 0 :(得分: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) 
}