【问题标题】:Output and save results of a nested loop in R在 R 中输出并保存嵌套循环的结果
【发布时间】:2021-02-13 03:58:03
【问题描述】:

我正在使用下面的脚本循环数据w 三次,当我使用打印显示它们时它会输出三个结果。我正在尝试将结果输出到分配的变量my_vector(j),但只显示最后一次迭代结果。如何将每次迭代的结果保存在数组中?

DU<-c(70,85,95)
a<-1-sqrt(3)*((100-DU)/130)
     
my_vector = c()
w<-c(0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5)
w_i<-1/w
for (i in 1:length(DU)){
  for (j in 1:length(w)){
   if (w_i[j] > 2-a[i]) {
       E[j]<-1
    } else if (w_i[j]<2-a[i]) {
       E[j]<-((a[i]*w[j]+1)^2-4*w[j])/(4*(a[i]-1)*w[j]^2)
    } else {
       E[j]=w_i[j]
    }
    my_vector[j]<-(E[j])
    print(E[j])
  }
  my_vector[j]<-(E[j])
 }

【问题讨论】:

  • 您还需要在开始循环之前声明E,例如E = c()
  • 谢谢。我注意到了这一点并更正了。

标签: r loops nested save output


【解决方案1】:

因为当您调用 my_vector[j]&lt;-(E[j]) 时,j 只取 1 和 length(w) 之间的值,因此对于循环 i 的每次迭代,您都会重写所有内容(每次更改 i 的值然后 @ 987654326@ 重新启动到 1)。

替换为:

my_vector[j + length(w)*(i-1)]<-(E[j])

另外,我认为你应该删除最后一行

my_vector[j]<-(E[j])

因为它在j 的循环之外(或者至少我不明白它为什么在这里)

【讨论】:

  • 感谢您的回复。但是这个解决方案给出了一个长度为 33 而不是 3 x 11 的输出向量。我需要输出为 3 x 11。对于自己的列/行中的每个循环。
  • 所以你想要一个 3 列 11 行的数组?您可以将 my_vector 转换为矩阵或在循环之前声明一个矩阵 (mat = matrixNA, nrow = ..., ncol = ...) 并将其填充到循环中 mat[i,j] = E[j ]
  • 再次感谢。有用。我也使用了 dim(my_vector)
猜你喜欢
  • 2017-04-16
  • 2021-06-15
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多