【发布时间】:2020-09-14 15:21:40
【问题描述】:
对于几年前回答的关于在栅格堆栈上进行线性回归的问题,我基本上有一个后续问题。 (见Linear regression on raster images - lm complains about NAs) 我进行了线性回归并使用 $coefficients 中的值计算了趋势,但现在想知道相关的 p 值(每个光栅像素一个)。
但是,calc 抱怨找不到签名“integer”、“function”的函数“calc”的继承方法
您可以使用以下代码重现此错误:
library(raster)
names = c('...','...','...','...','...')
s <- stack(names)
y <- values(s)
x <- log(c(10,20,30,40,50))
funa <- function(y) {
if(all(is.na(y))) {
c(NA, NA)
} else {
summary(lm(y ~ x))$coefficients
}
}
r <- calc(s, funa)
我可以理解 calc 不知道如何将 summary 的输出转换为新的栅格堆栈。因此,我尝试将 lm 的输出重塑为其他形式,例如使用“broom”包,但无济于事。现在 calc 抱怨说: is.infinite(v) 中的错误:即使我尝试强制输出到 data.frame 或 as.numeric,也没有为类型“list”实现默认方法。比如这样
library(broom)
funlm <- function(y) {
if(all(is.na(y))) {
c(NA, NA)
} else {
as.data.frame(glance(lm(y ~ x)))
}
}
r <- calc(s, funlm)
请帮忙
【问题讨论】: