Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays R-向量/数组加法_Arrays_R_Vector_Multidimensional Array_Average - Fatal编程技术网

Arrays R-向量/数组加法

Arrays R-向量/数组加法,arrays,r,vector,multidimensional-array,average,Arrays,R,Vector,Multidimensional Array,Average,我发现向量或数组操作有点问题 我有三个3D阵列,我想找出它们的平均值。我该怎么做?我们不能使用mean,因为它只返回一个值 更重要的是,数组中的一些单元格是NA,这意味着如果我像这样添加它们 结果也将显示NA 我如何让它识别细胞是否为NA,然后跳过它 像 我希望这些向量的平均输出是 (10, (10+15)/2, (15+20)/2, (15+22+26)/3, NA) 我们也不能使用na.omit,因为它将移动索引的顺序 这是相应的代码。我希望这会有帮助 for (yr in 1950:20

我发现向量或数组操作有点问题

我有三个3D阵列,我想找出它们的平均值。我该怎么做?我们不能使用mean,因为它只返回一个值

更重要的是,数组中的一些单元格是NA,这意味着如果我像这样添加它们

结果也将显示NA

我如何让它识别细胞是否为NA,然后跳过它

我希望这些向量的平均输出是

(10, (10+15)/2, (15+20)/2, (15+22+26)/3, NA)
我们也不能使用na.omit,因为它将移动索引的顺序

这是相应的代码。我希望这会有帮助

for (yr in 1950:2011) {
    temp_JFM <- sst5_sst2[,,year5_sst2==yr & (month5_sst2>=1 & month5_sst2<=3)]
       k = 0
       jfm=4*k+1
    for (i in 1:72) {
        for (j in 1:36) {
            iposst5_sst2[i,j,jfm] <- (temp_JFM[i,j,1]+temp_JFM[i,j,2]+temp_JFM[i,j,3])/3
        }
    }      
}
谢谢你

这个问题已经解决了

下面是最简单的纠正方法

iposst5_sst2[i,j,jfm] <- mean(temp_JFM[i,j,],na.rm=TRUE)

我不完全确定您想要的输出是什么,但我猜您真正想要构建的不是三个3D阵列,而是一个4D阵列,您可以在其上使用apply

大概是这样的:

#Three 3D arrays...
A <- array(runif(1:27),dim = c(3,3,3))
B <- array(runif(1:27),dim = c(3,3,3))
C <- array(runif(1:27),dim = c(3,3,3))

#Become one 4D array
D <- array(c(A,B,C),dim = c(3,3,3,3))

#Now we can simply apply the function mean
# and use it's na.rm = TRUE argument.
apply(D,1:3,mean,na.rm = TRUE)

我不完全确定您想要的输出是什么,但我猜您真正想要构建的不是三个3D阵列,而是一个4D阵列,您可以在其上使用apply

大概是这样的:

#Three 3D arrays...
A <- array(runif(1:27),dim = c(3,3,3))
B <- array(runif(1:27),dim = c(3,3,3))
C <- array(runif(1:27),dim = c(3,3,3))

#Become one 4D array
D <- array(c(A,B,C),dim = c(3,3,3,3))

#Now we can simply apply the function mean
# and use it's na.rm = TRUE argument.
apply(D,1:3,mean,na.rm = TRUE)

下面是一个使三个值的向量可用的示例,它使na.omit可用:

vectorAverage <- function(A,B,C) {
    Z <- rep(NA, length(A))

    for (i in 1:length(A)) {
        x <- na.omit(c(A[i],B[i],C[i]))
        if (length(x) > 0) Z[i] = mean(x)
    }
    Z
}

已编辑:在第一个版本的输出中遗漏了NaN。

以下是一个示例,该示例使三个值的向量可用,从而使na.omit可用:

vectorAverage <- function(A,B,C) {
    Z <- rep(NA, length(A))

    for (i in 1:length(A)) {
        x <- na.omit(c(A[i],B[i],C[i]))
        if (length(x) > 0) Z[i] = mean(x)
    }
    Z
}
已编辑:在第一个版本的输出中遗漏了NaN。

+1-而且,比应用快得多如果您使用大数组,则可以执行rowMeansD,na.rm=TRUE,dims=3+1-而且,比应用快得多如果您使用大数组,则可以执行rowMeansD,na.rm=TRUE,dims=3
vectorAverage(A,B,C)
[1] 10.0 12.5 17.5 21.0   NA