编写一个函数在不同的文件夹R

时间:2018-03-31 01:41:37

标签: r gis

我想编写一个函数来打开多个shapefile(其中有46个),每个都存储在自己的文件夹中。我正在使用非营利组织的数据,这就是他们存储它的方式,因此我编写代码以符合他们的数据存储实践(我知道它并不理想)。

我试着写这个功能,它有时会起作用,有时候也不行。我在打开文件时遇到了问题(奇怪的是,有些shapefile可以正常工作,而对于其他人我会收到错误)。另外,我不知道如何将文件分配给对象。

我首先获取wd中的shapefile文件夹列表:

shapefiles <- list.dirs(path = "./StateShapefiles", full.names = FALSE, 
    recursive = FALSE)

然后我编写我的函数(文件和文件夹具有相同的名称):

readshapefile <- function(x){
    statename <- deparse(substitute(x))
    filefolder <- paste(wd,statename, sep="/")
    assign(x,readOGR(dsn=filefolder,layer=statename))
}

我尝试调用该函数并收到此错误:

readshapefile(alabama)

Error in assign(x, readOGR(dsn = filefolder, layer = statename)) : 
    object 'alabama' not found

然后我想做类似的事情:

for (x in shapefiles){
    readshapefile(x)
}

我无法判断这是否有效,因为我无法弄清楚之前的部分。

我怀疑问题是readOGR不会将对象作为参数;它只想要字符串,但我不知道。如果任何人都可以帮助解决一个没有告诉组织移动文件的解决方案(不幸的是,这不会发生),那就太好了!我总是可以写46行readOGR,但这并不理想。

1 个答案:

答案 0 :(得分:0)

没有样本数据,很难给你很好的答案。这可能更接近您的需求。

shapefiles <- list.dirs(path = "./StateShapefiles", full.names = FALSE, 
    recursive = FALSE)

#function reads and returns object for given state
readshapefile <- function(statename){
    filefolder <- paste(getwd(), statename, sep="/")
    # display a message to help with debugging
    cat("Reading ", statename, " from ", filefolder, "\n")
    return(readOGR(dsn=filefolder, layer=statename))
}

#test the function, assigning to an object name
alabama_object <- readshapefile("alabama")

# lapply will call the function once for each state name 
# passing the state name as a parameter
all_shapes <- lapply(shapefiles, readshapefile)