【问题标题】:dplyr::bind_rows(...) vs. do.call(rbind, ...) for lists of symbolsdplyr::bind_rows(...) 与 do.call(rbind, ...) 的符号列表
【发布时间】:2019-05-07 23:35:45
【问题描述】:

假设我有以下数据框和名称的字符向量:

x <- data.frame(val = 1)
y <- data.frame(val = 2)
nms <- c("x", "y")

我想简单地将数据框行绑定在一起。我可以毫无问题地使用do.callrbind 做到这一点:

library(dplyr)

do.call(rbind, syms(nms))
#  val
#1   1
#2   2

但是,如果我尝试dplyr::bind_rows,我会收到一个奇怪的错误,告诉我参数 1 必须是数据帧事件,尽管它是一个数据帧:

bind_rows(syms(nms))
#Error: Argument 1 must be a data frame or a named atomic vector, not a data.frame

如果有人能告诉为什么会发生这种情况,我们将不胜感激。

【问题讨论】:

  • bind_rows() 中的syms() 需要什么?如果您尝试,bind_rows(x,y) 它将起作用。另请参阅此 github issue
  • 没有必要,因为这个问题可以通过很多方式解决。我只是好奇为什么bind_rows 在这里失败了,因为我预计它会起作用,并且错误很神秘,traceback 指向的 C 代码没有启发性。不过,看起来 github 问题(大部分)回答了我的问题,谢谢。

标签: r dplyr rlang


【解决方案1】:

我们可以使用mget返回list中的数据集,然后执行bind_rows

library(dplyr)
mget(nms) %>%
   bind_rows
#  val
#1   1
#2   2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2020-10-03
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    相关资源
    最近更新 更多