Почему я не могу использовать функцию apply в R для загрузки файлов .rda в рабочую область R? - PullRequest
1 голос
/ 16 января 2020

У меня есть список файлов .rda (RData). Я хотел бы быстро загрузить эти данные в R, не вызывая функцию load несколько раз. Я думал об использовании функции load() с sapply. Однако, используя следующий код, не загружает никакие объекты R в рабочую область:

# List files    
gewataPath <- list.files(path = file.path(datdir), pattern = glob2rx('Gewata*.rda'), full.names = T)
# Load files
sapply(gewataPath, function(file) {load(file)})

Также не выдает никакой ошибки.

Запуск al oop загружает файлы .rda в рабочее пространство R как объекты RasterLayer:

for (i in 1:length(gewataPath)) {
  load(gewataPath[i])
}

Мой вопрос: почему я не могу использовать функцию apply() для быстрой загрузки файлов .rda в рабочее пространство R, и мне нужно использовать все oop?

О данных : Данные содержат RasterLayers (со спутника Landsat), расположенный в Гевате, Эфиопия.

1 Ответ

4 голосов
/ 16 января 2020

load() загрузит данные в среду, в которой они были вызваны. Когда вы создаете функцию для передачи sapply, эта функция получает свою собственную среду. Если вы хотите, чтобы объекты существовали после sapply, вы хотите загрузить объекты в глобальную среду, а не в функциональную среду. Вы можете сделать это с помощью параметра envir=

sapply(gewataPath, function(file) {load(file, envir=globalenv())})

или просто

sapply(gewataPath, load, envir=globalenv())
...