我非常喜歡oce軟件包,並希望使用plot.topo製作加拿大東部和東北部海岸線和海底地形的地圖美國。我正在嘗試製作一個類似「topoMaritimes」的數據集,該數據集可用並涵蓋了我的大部分研究領域,但我還需要包括美國紐芬蘭/拉布拉多和新英格蘭。R oce - 如何將read.topo或as.topo應用於ETOPO1的.xyz文件
我嘗試過使用worldCoastline數據集,但分辨率太低。
我從我學習區域的ETOPO1獲得了一個.xyz數據集(使用與oce creator相同的源代碼:http://www.ngdc.noaa.gov/mgg/gdas/gd_designagrid.html),它應該適用於我。我現在試圖使用read.topo()或as.topo()將它讀入R,但遇到了問題。
我認爲read.topo()會工作,給定的信息在這裏指定:http://www.inside-r.org/packages/cran/oce/docs/read.topo。但是當我使用read.topo:
geo<-read.topo("ETOPO1data.xyz")
Error in if (is.character(file) && grep(".nc$", file)) { :
missing value where TRUE/FALSE needed
顯然這個錯誤表明有缺失的值/ NA?
當我嘗試導入它作爲一個普通的文本文件,它的工作原理:
geo<-read.table(file="ETOPO1data.xyz", sep="")
head(geo)
V1 V2 V3
1 -73.000000, 56.000000, 331
2 -72.983333, 56.000000, 328
3 -72.966667, 56.000000, 327
4 -72.950000, 56.000000, 327
5 -72.933333, 56.000000, 325
6 -72.916667, 56.000000, 324
然而,當我試着將其轉換成「地形」類型的對象,我得到一個錯誤:
geo<-as.topo(geo$V1, geo$V2, geo$V3)
Error in Summary.factor(c(1261L, 1260L, 1259L, 1258L, 1257L, 1256L, 1255L, :
min not meaningful for factors
事實證明,經度和緯度字段因素:
str(geo)
'data.frame': 1211821 obs. of 3 variables:
$ V1: Factor w/ 1261 levels "-52.000000,",..: 1261 1260 1259 1258 1257 1256 1255 1254 1253 1252 ...
$ V2: Factor w/ 961 levels "40.000000,","40.016667,",..: 961 961 961 961 961 961 961 961 961 961 ...
$ V3: int 331 328 327 327 325 324 325 329 336 351 ...
然而,轉換拉特/數字類型的完全改變它們的值:
geo$V1<-as.numeric(geo$V1)
geo$V2<-as.numeric(geo$V2)
head(geo)
V1 V2 V3
1 1261 961 331
2 1260 961 328
3 1259 961 327
4 1258 961 327
5 1257 961 325
6 1256 961 324
任何人都知道如何轉換x/y/z(即lon/lat/depth)文件添加到「topo」對象?這可能是我使用ETOPO1而不是ETOPO2引起的問題嗎?
在此先感謝!
嘗試使用光柵但使用的NetCDF文件中的數據類型之間的轉換。這些文件有問題,我總是將它們重新創建爲可敬的Geotiffs。我會詳細說明這一點,但不是現在。 – mdsumner