【问题标题】:function with 'load.Rdata' in for loopfor循环中带有'load.Rdata'的函数
【发布时间】:2021-10-28 08:58:40
【问题描述】:

我用for循环编写了一个函数,for循环使用load.Rdata。这是我的示例函数。

tmp_fun = function(list_dtaname){
  for (ii in 1:length(list_dtaname)) {
    filename0 = paste(list_dtaname[ii],'.RData',sep = '')
    miceadds::load.Rdata(filename0, "dta00")
    rm(dta00)
  }

}

当我使用这个功能时

tmp_fun(samplelist)

我得到了这个结果

tmp_fun(list_pot_dtaname$out)
Warning messages:
1: In rm(dta00) : object 'dta00' not found
2: In rm(dta00) : object 'dta00' not found
3: In rm(dta00) : object 'dta00' not found
4: In rm(dta00) : object 'dta00' not found
5: In rm(dta00) : object 'dta00' not found
6: In rm(dta00) : object 'dta00' not found
7: In rm(dta00) : object 'dta00' not found

为什么该功能不起作用?

【问题讨论】:

  • 我还没有创建 'dta00'
  • 仍然有相同的警告.. 我试图对原始代码做的是通过使用 'miceadds::load.Rdata(filename0, "dta00")' 和 I在每次 for 循环迭代中对更新的“dta00”做一些事情
  • 所以,我关心的不是 'rm(dta00)',我的代码似乎没有不断更新来自 load.Rdata 的数据
  • 不使用函数也没问题
  • 你可以试试dta00 <- miceadds::load.Rdata2( filename= paste(list_dtaname[ii],'.RData',sep = '')); rm(dta00)

标签: r function for-loop


【解决方案1】:

我们可以将其更改为load.Rdata2,其中有一个选项可以指定path(而不是要创建的'objname'),并且可以在<- 的lhs 上对一个临时对象进行分配我们rm

tmp_fun <- function(list_dtaname){
  for (ii in 1:length(list_dtaname)) {
    filename0 = paste(list_dtaname[ii],'.RData',sep = '')
   dta00 <- miceadds::load.Rdata2(filename=
          paste(list_dtaname[ii],'.RData',sep = ''))
    rm(dta00)
  }
}

load.Rdata 中的问题是对象的保存位置。根据?load.Rdata

函数load.Rdata将加载的对象保存在全局环境中,而load.Rdata2只加载指定环境的对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2021-07-05
    相关资源
    最近更新 更多