【问题标题】:Unable to store data in a matrix无法将数据存储在矩阵中
【发布时间】:2018-11-22 05:44:14
【问题描述】:

我正在使用以下代码检查线性趋势的 P 值,但循环似乎无法正常工作,因为我看不到 P 值的二维图,而只能看到一行

library(chron)
library(RColorBrewer)
library(lattice)
library(ncdf4)
#-------------------------------------------------------------------------------------------
options(warn=-1)

ncin <- nc_open("MOD04_10K_Winter.nc", readunlim=FALSE)
#print(ncin)
lon <- ncvar_get(ncin, varid="Longitude", start=NA, count=NA, verbose=FALSE,
          signedbyte=TRUE, collapse_degen=TRUE, raw_datavals=FALSE )
lat <- ncvar_get(ncin, varid="Latitude", start=NA, count=NA, verbose=FALSE,
                signedbyte=TRUE, collapse_degen=TRUE, raw_datavals=FALSE )
aod <- ncvar_get(ncin, varid="AOD", start=NA, count=NA, verbose=FALSE,
                signedbyte=TRUE, collapse_degen=TRUE, raw_datavals=FALSE )

px           <- matrix(nrow = 1:length(lon), ncol = 1:length(lat))
is.matrix(px)

for (lo in 1:length(lon)) {
  for (la in 1:length(lat)) {
   int1a    = aod[lo, la,]

   # if mean of int is finite then proceed else fill NA to all arrays
   mn = mean(int1a, trim = 0, na.rm = FALSE)
   if (is.finite(mn)) 
    {
    print("---------------- Reading Finite data -------------")
    xs       = 1:30                                     
    fn1a     = lm(int1a~xs)       # Function_NCP
    p_val    = summary(fn1a)$coefficients[2, 4]          # Saving p-value
    if (p_val < 0.05) {print("statisticlly significant")} else {print("statisticlly in-significant")}
    print(p_val)
    print(lo)
    print(la)
    px[lo][la] = p_val                                   # variables in [] only (?)
   } 

  }                                                      # latitude dimension
}   

如果我使用[lo, la] 而不是[lo][la],则会出现以下错误

[&lt;-(*tmp*, lo, la, value = 0.0543481042240582) 中的错误:
下标越界

对不起,如果解决方案非常琐碎,我刚刚开始在 R 中工作。

【问题讨论】:

  • 这只是意味着某处,在px[] 之一中,有一个数字与px 中的任何内容都不对应。尝试检查 for 循环中的极值(即第一个和最后一个),因为它们通常是导致此类问题的原因。此外,如果您需要更详细的帮助,请让您的答案可重复

标签: r loops


【解决方案1】:

您只需对矩阵px 声明做一个小修正。现在将行数和列数设置为向量:nrow = 1:length(lon)nrow = 1:length(lon)。 R 默默地只取这些向量的第一个元素并生成一个 1 到 1 的矩阵。 (实际上,它会产生一个警告,由警告被抑制!)

所以,解决办法是

px <- matrix(nrow = length(lon), ncol = length(lat))

【讨论】:

    猜你喜欢
    • 2019-03-08
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多