【问题标题】:Save results from a loop保存循环的结果
【发布时间】:2014-08-14 21:53:44
【问题描述】:

我是 R 新手。我有一个关于如何将循环中的结果保存到文件的问题。这是一个例子:

# Read in the data, set up variables
sdata<-read.csv("sdata.csv", header=T)
m=ncol(sdata)
x=matrix(0,m,4)
row.names(x) <- variable.names(sdata)
colnames(x) <- c( "Ground", "111d", "125d", "Ground")


for (i in 6:m){ 
Tukey1= HSD.test(lm(sdata[,i] ~ sdata$Medium+sdata$color+sdata$type+sdata$Micro), 'sdata$Micro')
x[i,] = Tukey1$goups[1:4,3]

}

我不知道如何使用循环来处理所有数据,所以我只尝试了其中一个,

Tukey1 = HSD.test(lm(sdata[,1] ~ sdata$Medium+sdata$color+sdata$type+sdata$Micro), 'sdata$Micro')
Tukey1

结果如下所示:

$statistics
      Mean       CV   MSerror       HSD r.harmonic
  11.87421 3.102479 0.1357148 0.5288771   7.384615

$parameters
  Df ntr StudentizedRange
  24   4         3.901262

$means
       sdata_mg[, 6]       std  r      Min      Max
111d                  11.86369 0.5317421  6 11.08623 12.45651
125d                  11.74433 0.1663130  6 11.53504 12.02412
14d                   11.54073 0.3877921  8 10.80300 11.96797
Ground                12.16673 0.3391952 12 11.56278 12.86199

$comparison
NULL

$groups
     trt    means  M
1 Ground 12.16673  a
2 111d   11.86369 ab
3 125d   11.74433 ab
4 14d    11.54073  b

我希望我的输出如下所示:

0001 a ab ab b
0002 ...
0003 ...
...

我怎样才能在循环中得到这样的结果?

我出错了:

   for (i in 6:m){ 
Tukey1=HSD.test(lm(sdata[,i] ~ sdata$Medium+sdata$color+sdata$type+sdata$Micro), 'sdata$Micro') 
x[i,] = Tukey1$groups[1:4,3]
} 

Error in row.names<-.data.frame(*tmp*, value = value) : missing values in 'row.names' are not allowed

Medium  color   type    Micro   replication JAT_0001    JAT_0002    JAT_UF_0003   .......
T13 Br  ST  14d 1   7.796561869 10.25722947 8.358342094
T13 Br  ST  111d    1   7.725102551 10.49954075 8.926736251
T13 Br  ST  125d    1   7.76897864  10.60934327 9.593081824
T13 Br  ST  125d    2   7.727733885 10.43269524 9.157324235
T13 Br  CO  14d 1   7.744205976 10.20154774 8.610439104
T13 Br  CO  111d    1   7.668092713 10.19312878 8.845051329
T13 Br  CO  125d    1   7.841236441 10.21631771 8.199416713
T13 Br  TL  Ground  1   7.437145528 10.6563327  8.957033378
T13 Br  TL  14d 1   7.609625475 10.49023043 8.896758964
T13 In  ST  Ground  1   7.595451012 10.80042474 9.464399064
T13 In  ST  Ground  2   7.730454076 10.64082958 8.542183261
T13 In  ST  111d    1   8.219528235 10.16869956 8.751080927
T13 In  TL  Ground  1   7.622781002 10.78092932 9.340316315
T2  Br  ST  14d 1   7.659787195 10.13839983 8.175650644
T2  Br  ST  14d 2   8.622211514 10.04158218 6.838194468
T2  Br  ST  14d 3   8.890290175 9.588902037 7.879420933
T2  Br  ST  Ground  1   7.961193023 10.16522895 8.81688728
T2  Br  CO  Ground  1   7.778931896 10.69110829 8.941482896
T2  Br  CO  Ground  2   8.038375873 10.57522016 8.982078909
T2  Br  CO  Ground  3   7.953854738 10.12257326 8.471493439
T2  Br  CO  111d    1   7.661298122 10.35416158 8.628662747
T2  Br  TL  Ground  1   7.766862289 10.92627748 9.9706205
T2  Br  TL  111d    1   7.899306069 9.796455434 7.92545749
T2  Br  TL  111d    2   8.062080142 9.812688772 8.186133545
T2  In  CO  Ground  1   7.717997141 10.0607044  8.413483731
T2  In  CO  14d 1   8.589243939 9.844666572 9.174649637
T2  In  CO  14d 2   8.207486485 10.78201791 9.450837609

【问题讨论】:

  • 开始解决此问题的最佳方法是使用可重现的示例,例如,我们可以使用数据集来运行您的代码
  • 另一个建议是在lm() 中使用data 参数
  • 如果您提供数据(上传数据并在问题中提供链接),或者提供所有代码运行和重现问题的代表性示例,您更有可能获得帮助。跨度>

标签: r loops output


【解决方案1】:

这是您的实际代码吗?如果是这样,您的 for() 语句就会被取消。试试

for (i in 1:m){ 
  Tukey1 = HSD.test(lm(sdata[,i] ~ sdata$Medium+sdata$color+sdata$type+sdata$Micro), 'sdata$Micro')
  x[i,] = Tukey1$goups[1:4,3]
}

您尚未描述遇到的错误,但您的问题似乎只是提取了您想要的部分结果,而不是运行回归和测试。如果这是真的,并且如果上面的代码不能解决您的问题,请让我们知道出现了什么错误/警告并提供Tukey1 作为数据,而不是您的原始数据(我不认为原始数据有帮助)。

从表面上看,除了我指出的问题之外,您的代码还可以,因此您遇到的错误只是一些小细节。这就是为什么人们想要可复制的代码,而不仅仅是一个模糊的“它不起作用”。

您还可以更改问题中的某些措辞,因为您的问题中没有任何其他内容表明您很难将任何内容保存到文件中。似乎您只是很难将结果复制到矩阵中。

【讨论】:

    猜你喜欢
    • 2021-05-04
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多