在marmap包中使用read.bathy的问题

时间:2015-01-28 21:00:20

标签: r

我有一个3列经度,纬度和深度的矩阵保存为csv文件,我想将其转换为一个沉睡的物体。但是,当使用此代码时,我收到以下错误:

myBathy <- read.bathy("marmapbathydata.csv", header=TRUE) 
Aggregation function missing: defaulting to length

summary(myBathy)然后返回

Bathymetric data of class 'bathy', with 651 rows and 691 columns
Latitudinal range: -69.78 to 47.2 (69.78 S to 47.2 N)
Longitudinal range: -179.79 to 8.86 (179.79 W to 8.86 E)
Cell size: 1 minute(s)

Depth statistics:
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.0000  0.0000  0.0000  0.1226  0.0000  2.0000 

First 5 columns and rows of the bathymetric matrix:

          -69.7798 -69.7741 -69.7683 -69.7625 -69.7568
-179.7917        1        1        1        1        1
-179.775         1        1        1        1        1
-179.7583        1        1        1        1        1
-179.7417        1        1        1        1        1
-179.725         1        1        1        1        1

我的测深数据不是矩形(它有651个唯一经度值和691个唯一纬度值),但我使用marmap版本0.9.1,所以这不应该是问题。

如何解决此错误并获取我的浴室对象? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

似乎您收到的消息不是错误消息:对象myBathy已创建并被识别为bathy对象,因为summary(myBathy)返回预期输出。数据集的经度和纬度范围是否与summary(myBathy)的输出一致?那么深度/高度值呢?我注意到myBathy中只有正值。正值用于高度。如果值指的是深度,则它们应为负值。

myBathy <- -myBathy

应该做的伎俩。如果您的值确实是高度值,那么,在绘图时您不应该忘记使用land=TRUE参数,否则您将看不到任何东西。

如果上述方法无法解决您的问题,则问题可能是由于您的测深数据的“不规则性”。 marmap需要可以在具有规则间隔的经度和纬度值的网格中排列的数据。你可以发布你的数据集,或至少它的一个样本,以便我可以重现错误吗?

可能的解决方法是使用R中可用的众多krigging方法之一作为在常规网格上推断数据的第一步。以下是使用fields包的示例:

library(fields)
myBathy <- read.table("marmapbathydata.csv", header=TRUE) 

## Use krig() to fit your data in e.g. a 300x300 grid. CAREFUL! It can take some time for large datasets!
bat.kr <- Krig(myBathy[,1:2], myBathy[,3])
out.p <- predictSurface(bat.kr, nx=300, ny=300, extrap=FALSE)

## Transform the 'predictSurface' object into a 'bathy' object
bat <- out.p$z
colnames(bat) <- out.p$y
rownames(bat) <- out.p$x
class(bat) <- "bathy"

summary(bat)
plot(bat)