【问题标题】:How to dynamically change names inside a for loop in usethis::use_data() R如何在 usethis::use_data() R 的 for 循环中动态更改名称
【发布时间】:2020-01-30 01:35:57
【问题描述】:

这是我第一次创建 R 包。我正在尝试将 39 个不同的数据集包含到我的包的预加载数据中。然而,创建 .rda 文件的 usethis::use_data() 函数只采用不带引号的名称而不是变量。所以 数据 = dynamic_name_from_for_loop

它不断创建文件 data.rda 而不是 dynamic_name_from_for_loop.rda

library(usethis)
library(readtext)
library(tidyverse)

site_list = c('0034L','0081L','0089L','0166L','0220R','0236L','0307R',
              '0333L','0414R','0434L','0445L','0450L','0476R','0501R','0515L',
              '0566R','0629R','0651R','0688R','0701R','0817L','0846R','0876L',
              '0917R','0938L','1044R','1194R','1227R','1233L','1377L','1396R',
              '1459L','1726L','1833R','1946L','2023R','2133L','2201R','2255R')


for (i in 1:length(site_list)){
  sitename = site_list[i]
  filename = paste0('M:/Tools/GCsandbar/data-raw/',sitename,"sd.csv")
  data = read.csv(filename, header = T)
  df_name = paste0('RC',sitename,'sd')
  assign(df_name,data)
  usethis::use_data(data,name = df_name, overwrite = TRUE)
  #file.rename(from = 'data/data.rda',to = paste('data/',df_name,'.rda')) ## this did not work
}

这只会创建 39 个 df_name.rda 实例,每次覆盖前一个实例,而不是创建 RC0034L.rda、RC0081L.rda、...。

【问题讨论】:

    标签: r rstudio


    【解决方案1】:

    在循环中,use_data 可以更改为use_data_raw

    usethis::use_data_raw(df_name)
    

    【讨论】:

      【解决方案2】:

      use_data 要求保存对象的不带引号的名称。 函数中没有名为name 的参数,据我所知,name = df-name 什么也没做。 请改用do.call

      library(usethis)
      library(readtext)
      library(tidyverse)
      
      site_list = c('0034L','0081L','0089L','0166L','0220R','0236L','0307R',
                '0333L','0414R','0434L','0445L','0450L','0476R','0501R','0515L',
                '0566R','0629R','0651R','0688R','0701R','0817L','0846R','0876L',
                '0917R','0938L','1044R','1194R','1227R','1233L','1377L','1396R',
                '1459L','1726L','1833R','1946L','2023R','2133L','2201R','2255R')
      
      
      for (i in 1:length(site_list)){
        sitename = site_list[i]
        filename = paste0('M:/Tools/GCsandbar/data-raw/',sitename,"sd.csv")
        data = read.csv(filename, header = T)
        df_name = paste0('RC',sitename,'sd')
        assign(df_name, data)
        do.call("use_data", list(as.name(df_name), overwrite = TRUE))
      }
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多