如何将嵌套循环值存储在 r 中的矩阵中

how to store nested loop values in a matrix in r

我创建了一个循环来计算以下公式:values = 1+PE - (1+(i^w))^(1/w)) 其中 PE 和 w 变化如下:

#creation of my variables
w <- seq(1, 4, by = 0.1)
PE <- seq(1, 2, by = 0.1)

#creation of a matrix where I will be storing the results of the loop

results <- matrix(nrow= length(PE) , ncol= length(w))

#loop where w and PE are changing 

for(i in PE){
  for (j in w){
    results <- (1+i - (1+(i^j))^(1/j))
    print (results)
  }
}

results

如果我 运行 它我得到一个列表,其中打印了我的所有值,但我面临 2 个问题:

i) 我无法存储这些值。当我在循环外打印结果时,我获得了 1 个值,而不是全部。所以我不能操纵它们来创建矩阵,也不能创建数据框。

ii) 我最初为要存储的这些值创建了一个矩阵,所以当我在循环中添加时: results[i, j] 当我应该只得到一个矩阵时,我得到了几个具有许多 NA 值的矩阵。这个矩阵应该有 11 行和 31 列

TABLE

results[i,j] 你定义的方式不起作用,因为 ij 不是索引,而是值,所以你不会得到 results[1,1], results[1,2], ...PEw 的值代替。为此,您应该使用 ij 作为索引,方法是执行 1:length(PE),并通过 PE[i] 获取 PE 的条款,对于 w.

for(i in 1:length(PE)){
  for (j in 1:length(w)){
    results[i,j] <- (1+PE[i] - (1+(PE[i]^w[j]))^(1/w[j]))
  }
}
w <- seq(1, 4, by = 0.1)
PE <- seq(1, 2, by = 0.1)

results <- sapply(w, function(j) (1+PE - (1+(PE^j))^(1/j)))

for(i in 1:length(PE)){
  for (j in 1:length(w)){
    results[i,j] <- (1+PE[i] - (1+(PE[i]^w[j]))^(1/w[j]))
  }
}

results 

write.table (results, file = "results.csv", sep = ",")