我有一个名为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 :(得分: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)
}