【问题标题】:How can I import from multiple files in r-drake?如何从 r-drake 中的多个文件导入?
【发布时间】:2019-10-19 19:27:45
【问题描述】:

我想从多个源文件中导入相似类别的数据。

每个来源都有一个短标签。

我怎样才能将它合并到 drake 中,而不会将每个文件都写成自己的目标?

我认为以下方法会起作用,但事实并非如此。理想情况下,我希望有目标 raw_araw_b

input_files <- list(
  'a' = 'file_1.csv',
  'b' = 'file_2.csv'
)

plan <-
  drake::drake_plan(
    raw = drake::target(
      import_file(file),
      transform = map(
        file = file_in(!! input_files)
      )
    )
  )

import_file <- function(file) {
  readr::read_csv(file, skip = 2)
}

【问题讨论】:

标签: drake-r-package


【解决方案1】:

你离得很近。 file_in() 需要按字面意思进入命令,而不是转换。

library(drake)
input_files <- c("file_1.csv", "file_2.csv")

plan <- drake_plan(
  raw = target(
    import_file(file_in(file)),
    transform = map(file = !!input_files)
  )
)

config <- drake_config(plan)
vis_drake_graph(config)

reprex package (v0.3.0) 于 2019 年 10 月 19 日创建

【讨论】:

  • 谢谢!关于如何从列表名称中制作目标名称后缀的任何建议?像label = names(input_files), .id = label 这样的东西会是预期的方式吗?
  • 是的,应该这样做。
【解决方案2】:

这可能是惯用的解决方案。

plan <-
  drake::drake_plan(
    raw = drake::target(
      import_file(file),
      transform = map(
        file = file_in('file_1.csv', 'file_2.csv'),
        label = c('a', 'b'),
        .id = label
      )
    )
  )

【讨论】:

    【解决方案3】:

    file_in 需要围绕整个字符串

    plan <-
      drake::drake_plan(
        raw = drake::target(
          import_file(file),
          transform = map(
            file = list(
      file_in('file_1.csv'),
      file_in('file_2.csv')
    )
          )
        )
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2021-10-25
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多