【问题标题】:subscript out of bounds error when I use R to do an regression analysis使用 R 进行回归分析时下标越界错误
【发布时间】:2017-03-30 14:36:42
【问题描述】:

当我运行下面的代码时,我收到:

"Error in coef(summary(linear))[6, 1] : subscript out of bounds

这是我运行的代码:

setwd("E:/test_analysis/TNBC")

data=read.table("gene_snp_regression.csv",header=T,sep=",")
result <- NULL
for (i in 10:708){  
  linear <- lm(data[, 6] ~ 
                 data[,2]+data[,3]+data[,4]+data[,5]+data[,i], data = data)
  
  x.inv <- try(solve(coef(summary(linear))[6,4]),silent = TRUE)
  if ("try-error" %in% class(x.inv)) pvalue <- "NA"
  else pvalue <- coef(summary(linear))[6,4]
  
  beta <-  coef(summary(linear))[6,1]
  
  X <- cbind(beta, pvalue)
  
  result <- rbind(result, X)    
}
write.csv(result,"sig1_genesnp.csv",row.names = T, quote = F)

我想得到估计值“data[, i]”

                   Estimate Std. Error    t value     Pr(>|t|)
       (Intercept) 158.98784   54.67884  2.9076665 3.959462e-03
       data[, 2]    11.72500   14.42698  0.8127131 4.171348e-01
       data[, 3]    14.22904   14.53601  0.9788822 3.285587e-01
       data[, 4]   -52.44000   13.25313 -3.9567994 9.832974e-05
       data[, 5]   -23.63112   13.88214 -1.7022681 8.991430e-02
       data[, i]    12.74142   10.06581  1.2658112 2.067270e-01

但在我运行代码后,我收到:“coef(summary(linear))[6, 1] 中的错误:下标越界。

这里是coef的结构(summary(linear))

str(coef(summary(linear)))
num [1:6, 1:4] 159 11.7 14.2 -52.4 -23.6 ...                     
- attr(*, "dimnames")=List of 2
  ..$ : chr [1:6] "(Intercept)" "data[, 2]" "data[, 3]" "data[, 4]" ...
  ..$ : chr [1:4] "Estimate" "Std. Error" "t value" "Pr(>|t|)"

【问题讨论】:

  • 你看过coef(summary(linear))的结构吗?
  • 请编辑您原来的问题。
  • 是的,我得到的 coef(summary(linear)) 与我在上面粘贴的结果完全一样。但是当我运行整个代码时,我得到了错误并且错过了正确的 pvalue 和 Estimate 值。
  • 你能粘贴输出的结构(str())吗?
  • 请不要使用 cmets 来分享您的结果。编辑您的原始问题。你可以花几分钟的时间来了解一下stackoverflow works

标签: r error-handling


【解决方案1】:

[6, 1] 应该在第一列中选​​择第六个元素。这使我相信循环中出现了问题。有很多调试选项可以解决这个问题。

在 for 循环中你可以:

(1) 插入打印语句

print (i) # it will let you know where the problem occurs
print(dim(coef(summary(linear)))) # see dimensions of the result

(2) 插入浏览器()

browser() 

然后通过按n(或回车)执行一行或按c 运行整个循环一次来手动单步执行代码。

在您的 R 会话中,您可以设置

options(error = recovery)

当发生错误时,R 将停止,并让您检查各种环境。此时,您可以通过检查所有元素来确定错误的根本原因。

通常的做法是手动设置i 并单步执行代码,检查每个元素。

【讨论】:

    猜你喜欢
    • 2020-01-06
    • 2015-04-03
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多