【问题标题】:Saving Elements of List in R - Number of Files doesnt match length of list在 R 中保存列表元素 - 文件数与列表长度不匹配
【发布时间】:2021-10-24 21:00:23
【问题描述】:

我有两个仅包含数据框的列表。 我的目标是将他们的元素单独保存为 csv。 但是,无论我尝试哪种方法,最后输出文件夹都不会包含与列表中包含的元素相同数量的 csv 文件。

例如。 列表长度 = 150 输出文件夹中的 CSV 数量 = 122

我的试验:

  1. 应用
    lapply(names(price_list_raw), function(x) {
      x1 <- price_list_raw[[x]]
      write_csv(x1, file=paste0("C:/Users/XXX",'/', x, '.csv'))
    })
  1. 石器时代的循环
    for (i in 1: length(price_list_raw)){
      nam <- names(price_list_raw[i])
      output_folder <- paste0("C:/Users/XXX",'/',nam,".csv")
      write_csv(price_list_raw[[i]],
                output_folder
      )
      print(i)
    }

我错过了什么? 当我查看列表及其元素时,它们都是数据框

有什么建议吗?

亲切的问候

【问题讨论】:

  • length(unique(names(price_list_raw)))的值是多少?
  • readr::write_csv 的第二个参数是path=,而不是file=。你用的是其他的吗?
  • @r2evans 在第一种情况下,OP提到了file=,这是write_csv中的一个参数
  • 是的,但是如果用户在 1.4.0 之前有readr 的版本,那么他们没有file=,他们有path=。请参阅 readr.tidyverse.org/news/index.html,在 1.4.0 和“重大更改”下(因为 that 是一项重大更改)。
  • 公平点,谢谢。

标签: r list csv dplyr save


【解决方案1】:

不要循环遍历可以重复的names,而是遍历元素序列

lapply(seq_along(price_list_raw), function(x) {
      x1 <- price_list_raw[[x]]
      write_csv(x1, file=paste0("C:/Users/XXX",'/', names(price_list_raw)[x], x, '.csv'))
    })

此外,如 cmets 中所述,如果有重复的名称,那么一种选择是通过使其唯一来循环名称

names(price_list_raw) <- make.unique(names(price_list_raw))
lapply(names(price_list_raw), function(x) {
      x1 <- price_list_raw[[x]]
      write_csv(x1, file=paste0("C:/Users/XXX",'/', x, '.csv'))
    })

write_csv中的用法是

write_csv(
  x,
  file,
  na = "NA",
  append = FALSE,
  col_names = !append,
  quote_escape = "double",
  eol = "\n",
  path = deprecated()
)

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 2018-04-15
    • 2021-09-16
    • 2021-07-07
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多