假设我有许多个.gpx文件(这些文件包含来自Garmin eTrex的GPX航点数据)。我想用不同的名称将它们加载到R中并进行操作。
我可以这样读取一个文件:
运行上述程序会产生以下错误:
``` Error in read.table(con <- textConnection(gpsdata), fill = TRUE, ...) : no lines available in input In addition: Warning message: running command 'C:\PROGRA~2\GPSBabel\gpsbabel.exe -w -i gpx -f file1_w_12_f_ddf.gpx -o tabsep -F -' had status 1 ```
请注意,我能够单独读取此文件,因此似乎与文件本身无关,而是与在循环中运行readGPS有关。
总的来说,我仍然觉得R如何处理像上面的变量x非常令人困惑。 我不确定如何修改从独立实例`f =“file1_w_12_f_ddf.gpx”`传递给readGPS的参数:它应该是`x`,还是`f = x`,还是`f =“x”`,或者其他什么? 或者问题可能出现在对GPSBabel的调用中...
我在下面包含一个示例文件,以便您可以将其复制到文本编辑器中,并保存为`.gpx`两次,使用不同的名称并自行尝试。
我可以这样读取一个文件:
library(maptools)
gpx.raw <- readGPS(i = "gpx", f = "file1_w_12_f_ddf.gpx", type="w")
假设我想将它们中的一些读入内存。我可以尝试使用 for 循环:
files <- list.files(".",pattern = "*.gpx")
for(x in files){
#Create new file name
temp <- strsplit(x,"_",fixed=TRUE)
visit.id <- sapply(temp,FUN=function(x){paste(x[1],x[4],substr(x[5],1,3),sep="_")})
#read file with new filename
assign(visit.id, readGPS(i = "gpx", f = x, type="w"))
}
运行上述程序会产生以下错误:
``` Error in read.table(con <- textConnection(gpsdata), fill = TRUE, ...) : no lines available in input In addition: Warning message: running command 'C:\PROGRA~2\GPSBabel\gpsbabel.exe -w -i gpx -f file1_w_12_f_ddf.gpx -o tabsep -F -' had status 1 ```
请注意,我能够单独读取此文件,因此似乎与文件本身无关,而是与在循环中运行readGPS有关。
总的来说,我仍然觉得R如何处理像上面的变量x非常令人困惑。 我不确定如何修改从独立实例`f =“file1_w_12_f_ddf.gpx”`传递给readGPS的参数:它应该是`x`,还是`f = x`,还是`f =“x”`,或者其他什么? 或者问题可能出现在对GPSBabel的调用中...
我在下面包含一个示例文件,以便您可以将其复制到文本编辑器中,并保存为`.gpx`两次,使用不同的名称并自行尝试。
<?xml version="1.0" encoding="UTF-8"?>
<gpx
version="1.0"
creator="GPSBabel - http://www.gpsbabel.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.topografix.com/GPX/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<time>2010-09-14T18:35:43Z</time>
<bounds minlat="18.149888897" minlon="-96.747799935" maxlat="50.982883293" maxlon="121.640266674"/>
<wpt lat="38.855549991" lon="-94.799016668">
<ele>325.049072</ele>
<name>GARMIN</name>
<cmt>GARMIN</cmt>
<desc>GARMIN</desc>
<sym>Flag</sym>
</wpt>
<wpt lat="50.982883293" lon="-1.463899976">
<ele>35.934692</ele>
<name>GRMEUR</name>
<cmt>GRMEUR</cmt>
<desc>GRMEUR</desc>
<sym>Flag</sym>
</wpt>
<wpt lat="25.061783362" lon="121.640266674">
<ele>38.097656</ele>
<name>GRMTWN</name>
<cmt>GRMTWN</cmt>
<desc>GRMTWN</desc>
<sym>Flag</sym>
</wpt>
</gpx>
注意:要运行readGPS,您需要安装并将开源GPSBabel程序引用到您的PATH变量中。
readGPS
函数的f
参数:只有当它是调用readGPS
时第二个参数时,传递x
才能起作用;无论将其放在哪里,传递f=x
都可以工作;而传递f="x"
根本行不通(无论你已经将变量名为x
的变量存储了什么内容,它都会将字符"x"传递给参数f
)。 - joran