我有一个关于do.call的问题,很奇怪
1。我想做什么
我试图将许多数据帧绑定到一个数据帧中,所有数据帧都在列表t3中,您可以看到下面的图片:
2。方法
2.1一个人工作
t4 <- do.call(rbind.data.frame, t3)
2.2无效
t4 <- rbind.data.frame(t3)
错误信息如下:
第3。问题
我认为如果我删除do.call,rbind.data.frame的行为会相同,为什么只有在我使用do.call时它才有效?提前致谢。
答案 0 :(得分:2)
函数do.call(FUN, list)
旨在接受输入函数FUN
以及列表输入list
。它将函数应用于列表中的每个元素,然后聚合结果。
在你的电话中
t4 <- rbind.data.frame(t3)
当rbind
函数期望单个数据帧而不是rbind.data.frame
作为输入时,您正尝试t3
数据帧列表。
如果您愿意,可以使用rbind.data.frame
而不是do.call
。假设列表t3
中只有5个元素,则以下内容应该有效:
t4 <- rbind.data.frame(t3[[1]], t3[[2]], t3[[3]], t3[[4]], t3[[5]])
正如您所看到的,这将很快变得乏味(而且不可读)。这是使用do.call()
的优势。