2017-12-18 147 views
0

我在文件夾中有一堆.gpx文件,我試圖用readOGR讀取它們,併爲每個.gpx文件獲取內存中的一個文件。這是什麼不工作:使用readOGR讀取多個文件並輸出到R中的不同文件的循環

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很新,我不知道如何做到這一點。我試着在網上查找,發現一些特定於非空間文件的解決方案,並以這種或那種方式搞砸了這些文件。

有誰知道如何做到這一點?

謝謝!

回答

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

謝謝,它的工作!也感謝你解釋,我相信它將來會有用。 – ECEM

0

在大多數情況下,使用assign是一個非常糟糕的選擇。儘管斯圖亞特艾倫正確回答了你的問題,但你很可能會問錯誤的問題。

你試圖做的是典型的初學者錯誤。使用這種方法,最終會得到很多難以操作的命名對象,因爲您需要通過名稱來引用它們,例如,很難在循環中使用這些對象。

相反,你或許應該做一個清單,所有對象:

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

並把它從那裏。

相關問題