【问题标题】:how to store nested loop values in a matrix in r如何将嵌套循环值存储在r中的矩阵中
【发布时间】:2020-10-30 11:55:24
【问题描述】:

我创建了一个循环来计算以下公式: 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

【问题讨论】:

  • result &lt;- sapply(w, function(j) (1+PE - (1+(PE^j))^(1/j))) 使用向量运算!

标签: r loops matrix nested-loops


【解决方案1】:

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]))
  }
}

【讨论】:

  • result &lt;- sapply(w, function(j) (1+PE - (1+(PE^j))^(1/j)))
【解决方案2】:
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 = ",")


【讨论】:

  • 为什么要计算results 的元素两次(一次在循环之前,然后在循环中)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2018-05-31
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
相关资源
最近更新 更多