【问题标题】:R - Array data loop selectionR - 数组数据循环选择
【发布时间】:2012-02-26 14:18:43
【问题描述】:

我想从 3D 数组 (ssta_sst, 360*180*362) 中选择六月、七月和八月的数据。

循环有效,但 ssta_winter 的输出具有与 ssta_winter[,,i]. 相同的值,如下所示。我已将其设置为 (360,180,29) 的数组。

我认为问题在于变量temp,我想先将它定义为一个数组,但我不知道它应该是什么大小(360,180,3)或(360,180,3*29)以及如何在 temp 中保留循环计数器,当它向下传递到寻找平均阶段时?

ssta_winter = array( data=NA, dim = c(360,180,29))
temp = array( data=NA, dim = c(360,180,3))

for (yr in 1982:2010) {
    temp <- ssta_sst[,,year_sst==yr & (month_sst>=6 & month_sst<=8)]
    for (i in 1:360) {
        for (j in 1:180) {
            ssta_winter[i,j,] <- mean(temp[i,j,])
        }
    }
}

> for (i in 1:29){
+ print(ssta_winter[180,166,i])
+ }
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583
[1] 0.2222583

【问题讨论】:

    标签: r loops multidimensional-array matrix nested-loops


    【解决方案1】:

    这:mean(temp[i,j,]) 只会产生一个值,因此该分配的 LHS 应该是 ssta_winter[i,j],这意味着您的冬季(在南半球)月份的维度应该只有 c(360,180 )。 (这就解释了你所困惑的模式。)

    如果您想要“年份”索引的单个值,那么您需要在分配的 LHS 上使用应用于循环内索引的 seq_along:

    for (yr in seq_along(1982:2010 ) ) {
       temp <- ssta_sst[,,year_sst==(1982:2010)[yr] & (month_sst>=6 & month_sst<=8)]
       for (i in 1:360) {
         for (j in 1:180) {
            ssta_winter[i,j,yr] <- mean(temp[i,j,])
                                       }
                         }
                          }
    

    【讨论】:

    • 但我想要的是 29 年的平均冬季温度,即 ssta_winter[360,180,29]。我该如何解决?
    • 看看我的附录是否解决了您的要求。
    • 我试图做的,但年份太大,它说:“ssta_winter[i, j, yr]
    • 对不起。我应该建议您将索引更改为 seq_along()。它试图将值放在第 1982 个插槽中,但矩阵不够大。
    • 别担心,我已经想通了。只需在开始 k=0 时添加另一个计数器,然后在 temp 分配之后,只需编写 k=k+1,然后将 ssta_winter[i, j, ]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多