如何计算sd?在as.double(x)中出错:不能将类型'S4'强制到类型'double'的向量上。

问题描述 投票:1回答:2

有人知道我的代码有什么问题吗?我编辑了帖子,因为我没有给你数据。我想计算sd。平均数的计算成功了。

这里是裁剪后的数据的链接。

https:/drive.google.comdrivefolders1ljT1fzaDlSmn_3j7zHshS5lrV1wBvVQD。

library(raster)
r <- brick("filename")
#mean
mean <- mean(r)

#sd
standard_dev <- sd(r)
standard_dev2 <- sd(r, na.rm =TRUE)
standard_deviation <- calc(r, sd)
r raster standard-deviation geotiff
2个回答
2
投票

你想计算RasterBrick中每个单元的SD。

总是包括一个自足的,最小的可重复的例子。你可以从你所使用的软件包的手册中的例子开始,比如这个

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))

解决办法

x <- calc(b, sd)

x
class      : RasterLayer 
dimensions : 77, 101, 7777  (nrow, ncol, ncell)
resolution : 1, 1  (x, y)
extent     : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
crs        : +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs 
source     : memory
names      : layer 
values     : 0, 38.5746  (min, max)

看来这对你来说是行不通的,因为你有一个叫做 "RasterLayer "的RasterLayer。sd

sd <- b
calc(b, sd)
#Error in (function (classes, fdef, mtable)  : 
#  unable to find an inherited method for function ‘calc’ for signature ‘"RasterBrick", "RasterBrick"’

在这种情况下,你可以更明确地使用函数 namespace (统计)

calc(b, stats::sd)

然后它又能如期工作


0
投票

功能:该函数计算x中数值的标准差。sd(x, na.rm = FALSE)

如果 na.rm 为 TRUE,则在计算前删除缺失值。

参数

x:一个数值向量或R对象,但不是一个可通过as.double(x)转为数值的因子。

na.rm:逻辑。丢失的值是否应该被删除?

例子

sd(1:2) ^ 2

取自使用RStudio访问帮助文档。

?sd()

针对您的情况。

standard_deviation <- sd(r)

如果您能提供给我们以下信息,我们可能会进一步帮助您。可复制的例子.

© www.soinside.com 2019 - 2024. All rights reserved.