【问题标题】:in R, pass character vector to dplyr::bid_rows在 R 中,将字符向量传递给 dplyr::bid_rows
【发布时间】:2021-01-30 07:55:20
【问题描述】:

我有像 n<-"get('mtcars'),get('mtcars')" 这样的字符向量,但可能是 1 到 9 个不同的数据帧,我想像 bind_rows(get('mtcars'),get('mtcars')) 一样绑定在一起,但使用 bind_rows(n)

【问题讨论】:

  • 我不喜欢将代码作为文本并使用eval,但这可能是一种选择。但是,要做到这一点,您需要有一个有效的 R 表达式,并且(在n<- 之后)是无效的。此外,向量不适合多帧,list 更适合。例如,bind_rows(mtcars,mtcars)bind_rows(list(mtcars, mtcars))do.call(bind_rows, list(mtcars, mtcars)) 都是相同的。
  • 这个向量来自哪里?似乎是一种巨大的代码气味。
  • 我有一个数据框,其中 colA 作为 Shiny 的 selectInput 控件中的一项,而 colB 具有数据框的名称。我可以从 selectInput 获取 colA 值并从 colB 获取数据帧名称,然后构建 bind_rows 可识别的“get('dfA'), get('dfB')”?如果有另一种方法可以使用 selectInput 选择具有相同结构的不同数据帧,使用 bind_rows 将它们组合起来,我很乐意试一试。

标签: r vector character rows bind


【解决方案1】:

你可以str_split这个字符串,parseeval得到想要的结果。

library(tidyverse)

n <- "get('mtcars'),get('mtcars')"

n %>%
  str_split(",", simplify = TRUE) %>%
  map(~eval(parse(text = .))) %>%
  bind_rows()

但是,将字符串转换为求值表达式通常不是最好的方法。

【讨论】:

    猜你喜欢
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多