为什么不能在R中使用Apply函数将.rda文件加载到R工作区中?

问题描述 投票:0回答:1

我有一个.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)})

也不给出任何错误。

运行循环的确会将.rda文件作为RasterLayer对象加载到R工作区中:

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

我的问题是:为什么不能使用apply()函数将.rda文件快速加载到R工作区中,而我必须使用循环吗?

关于数据:数据包含位于埃塞俄比亚Gewata的RasterLayers(来自Landsat卫星)。

r raster sapply rda
1个回答
2
投票

load()会将数据加载到调用它的环境中。当您创建要传递给sapply的函数时,该函数将获得其自身的环境。如果希望对象在sapply之后存在,则要将对象加载到全局环境中,而不是函数环境中。您可以使用envir=参数

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

或者只是

sapply(gewataPath, load, envir=globalenv())
© www.soinside.com 2019 - 2024. All rights reserved.