括号语法问题循环出现

时间:2020-06-26 21:08:07

标签: r loops dataframe regression

我正在尝试编写一个循环,该循环将为每行提供一个r ^ 2值。我遇到的问题是如何格式化[]或()以获取行向量。我知道按名称调用它们会更容易,但是此脚本将处理不同的项目,这些项目的列数都不相同-因此,对名称进行硬编码不是一个选择。第一列将始终是波长,其余列将始终是我要使用的数据点。需要明确的是,我希望将除波长以外的每一列都包括在r ^ 2计算中。

数据框(statsDF)如下:

  Wavelength    Line_1    Line_2    Line_3    Line_4    Line_5    Line_6    Line_7
1       0400 0.4054731 0.3193632 0.2667026 0.8494675 0.2394639 0.2936054 0.2453124
2       0402 0.4048527 0.3195507 0.2693250 0.8664931 0.2380499 0.2931895 0.2437657
3       0404 0.4041760 0.3226145 0.2731347 0.8756971 0.2338797 0.2876017 0.2432391
4       0406 0.4079322 0.3264623 0.2750645 0.8770746 0.2273580 0.2866682 0.2476563
5       0408 0.4158769 0.3271127 0.2790707 0.8770176 0.2268334 0.2947697 0.2567014

我的代码如下:

rsq <- for (i in 1:nrow(statsDF)) {
    points <- as.numeric(statsDF([ , 2: ])) #The issue is here
    r2 <- summary(lm(Wavelength ~ points, data = statsDF))$r.squared
    print(r2)
  }

无论我使用()和[]的哪种组合,都会给我一个有关意外符号的错误提示。我敢肯定这只是我所忽略的东西,但是我对R还是很陌生。我当然也愿意接受sapply / etc。整个循环的替代方案。有任何想法吗?谢谢!

6/31修改:

我正在尝试以下脚本:

myR <- for (n in 1:nrow(statsDF)) {
   i <- cbind(2:ncol(statsDF))
   r2 <- summary(lm(statsDF[n,1] ~ as.matrix(statsDF[n , i]), options(na.action="na.omit")))$r.squared
   print(r2)
}

...然后产生此错误:

Error in model.matrix.default(mt, mf, contrasts) : 
  variable 1 has no levels

我希望这个错误不会引起我的注意。我试过同时制作i和n as.numericas.matrix,并将它们分解为自己的变量。我还尝试将dataPoint改写为数字,并且我再次检查了dataPoint和Wavelength是否为因数-这什么都没做。

如建议的那样,我也正在尝试使用转置后的数据框版本:

 dataPoint    0400        0402        0404        0406         408
1   Line_1  0.4054731   0.4048527   0.404176    0.4079322   0.4158769
2   Line_2  0.3193632   0.3195507   0.3226145   0.3264623   0.3271127
3   Line_3  0.2667026   0.269325    0.2731347   0.2750645   0.2790707
4   Line_4  0.8494675   0.8664931   0.8756971   0.8770746   0.8770176
5   Line_5  0.2394639   0.2380499   0.2338797   0.227358    0.2268334

使用以下代码:

myR2 <- for (n in 2:ncol(LongDF)) {
  r4 <- summary(lm(as.matrix(LongDF[1, ]) ~ as.matrix(LongDF[n, ]), 
options(na.action="na.exclude")))$r.squared 
  print(r4)
}

然后出现以下错误:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels

我还按照建议提出了一个交叉验证问题:(https://stats.stackexchange.com/questions/474267/how-to-determine-statistical-significance-of-one-independent-variable-by-two-dep)-我认为我在这里对研究问题的措辞更好。

7/2更新::我已经放弃尝试对此数据集进行统计,而是依靠绘制数据并假设人们可以直观地了解哪些波长是重要的。感谢所有尝试提供帮助的人!

0 个答案:

没有答案