我正在使用下面的代码计算两个数据集之间的相关性图。这个代码工作正常,我得到的结果如下:![在此处输入图像描述]![在此输入图像描述] [1]。< / p>
我还希望得到另一张地图,显示在计算每个像素时使用了多少对,因此我得到了N长的地图与相关图。 按照Paul Hiemstra的说法,这个函数给出了cor和N:
cor_withN = function(...) {
cor_obj = cor.test(...)
print(sprintf("N = %s", cor_obj$parameter + 2))
return(data.frame(cor = cor_obj$estimate, N = cor_obj$parameter + 2))
}
cor_withN(runif(100), runif(100))
[1] "N = 100"
cor N
cor 0.1718225 100
当我简单地用cor_withN替换cor时,我收到了这个错误:
Error in cor.test.default(...) : not enough finite observations
如何在我的代码中暗示这个函数来获得两个相关和N值的映射?
答案 0 :(得分:1)
<强> 1。错误
Error in cor.test.default(...) : not enough finite observations
根据corr.test
来源(http://svn.r-project.org/R/trunk/src/library/stats/R/cor.test.R),此错误可能会在两种情况下出现:
确实,cor.test(c(1,2), c(2,3))
会导致完全相同的错误,而cor(c(1,2), c(2,3))
会给出答案。
注意,cor.test
使用complete.cases(x,y)
进行计算。所以,看看你的数据 - 可能在某处没有足够的配对。
<强> 2。功能强>
cor
返回numeric
值,您的函数corr_withN
返回data.frame
。所以,看起来你不能简单地替换。
据我了解,您只需要一个大小为1440x720
的矩阵,该矩阵将在地图上绘制。在这种情况下,您可以使用cor
作为第一个图,而简单函数返回用于计算第二个图的相关性的对的数量。函数本身可以简单如下:
cor_withN <- function(...) {
cor.test(...)$parameter+2
}
更新:发表评论后
如果cor_withN
在少于3对时必须返回NA
,则应对其进行修改:
cor_withN <- function(...) {
res <- try(cor.test(...)$parameter+2, silent=TRUE)
ifelse(class(res)=="try-error", NA, res)
}
此函数尝试计算相关性,如果失败,则返回NA
或其他数量的对。