我有一个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,所以这不应该是问题。
如何解决此错误并获取我的浴室对象? 任何帮助将不胜感激。
答案 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)