首页 > 解决方案 > for循环中带有'load.Rdata'的函数

问题描述

我用 for-loop 编写了一个函数,for-loop 正在使用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

为什么该功能不起作用?

标签: rfunctionfor-loop

解决方案


我们可以将其更改为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 仅加载指定环境中的对象


推荐阅读