#r #function #for-loop
Вопрос:
Я пишу функцию с циклом 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
почему эта функция не работает?
Комментарии:
1. Я не создавал «dta00»
2. все те же предупреждения.. Что я пытаюсь сделать с исходным кодом, так это продолжать обновлять данные с помощью «miceadds::load.Rdata(имя файла 0,» dta00″)», и я что-то делаю с обновленным «dta00» в каждой итерации цикла
3. итак, меня беспокоит не » rm(dta00)», мой код, похоже, не обновляет данные из load.Rdata
4. Если я не использую функцию, нет никаких проблем
5. Можете ли вы попробовать
dta00 <- miceadds::load.Rdata2( filename= paste(list_dtaname[ii],'.RData',sep = '')); rm(dta00)
Ответ №1:
Мы могли бы изменить его на load.Rdata2
то, где есть возможность указать path
(вместо «имя объекта», которое должно быть создано), и назначение может быть выполнено на 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 загружает объект только в указанные среды