循环用于读取具有readOGR的多个文件并输出到R中的不同文件

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

我在一个文件夹中有一堆.gpx文件,我试图用readOGR读取它们,并为每个.gpx文件在内存中获取一个文件。这是不起作用的:

myfiles <- list.files(".", pattern = "*.gpx")

for (i in 1:length(myfiles)) {
  temp.gpx <- readOGR(dsn = myfiles[i], layer="tracks")
  temp.gpx
}

这样做是读取所有文件,然后将它们写入temp.gpx。我想要做的就是阅读它们并将其写入,例如temp1.gpx,temp2.​​gpx等。

不幸的是,我对R很新,我不知道怎么做。我尝试在线查找并找到了一些特定于非空间文件的解决方案,并以某种方式弄乱了这些文件。

有谁知道如何做到这一点?

谢谢!

r gis
2个回答
0
投票

您可以使用assign()使用其他变量生成变量名称:

myfiles <- list.files(".",pattern = "*.gpx")

for (i in 1:length(myfiles)) {
  varName <- paste0("temp", i, ".gpx")
  assign(varName, readOGR(dsn = myfiles[i], layer="tracks"))
}

这将创建一个字符变量varName,循环的每次迭代将具有值temp1.gpxtemp2.gpx等:

## i <- 1
varName <- paste0("temp", i, ".gpx")
## [1] "temp1.gpx"

然后assign()readOGR()的结果分配给当前的temp*.gpx变量。


0
投票

在大多数情况下,使用assign是一个非常糟糕的选择。尽管Stuart Allen正确地回答了你的问题,但你很可能会提出错误的问题。

你要做的是典型的初学者错误。使用这种方法,您最终会得到几个难以操作的命名对象,因为您需要通过它们的名称来引用它们,例如,很难在循环中使用这些对象。

相反,您可能应该为所有对象创建一个列表:

 gpx <- lapply(myfiles, 
                 function(f) { readOGR(dsn=f, layer="tracks") }
              )

从那里拿走它。

© www.soinside.com 2019 - 2024. All rights reserved.