在列表中迭代添加矩阵和已用时间

时间:2018-04-14 20:32:04

标签: r list for-loop

我这里有一个函数,generate.board(n, p)生成一个n行和n列的矩阵(参数p在这里并不重要。)

我还创建了一个空列表trials来存储我的输出。

我想做什么:

我希望generate.boardn从[{1}}到10的每个值迭代运行100 10次,间隔为10。此外,对于generate.board的每次运行,我想记录经过的时间。

我想帮助将矩阵和经过的时间存储在试验中。我会告诉你我在这里有什么,这会引发一个错误:

subscript out of bounds

我的代码:

trials <- list()
for (ii in seq(10, 100, by= 10)) {
  for (jj in seq(10)) {
    trials[[ii]][jj] <- generate.board(n = ii, p = 0.4)
    trials[ii / 10][jj + 1] <- system.time(generate.board(n = ii, p = 0.4))[3]
  }
}

1 个答案:

答案 0 :(得分:0)

如果不进行进一步修改,我们只需使用paste来命名我们的列表条目。发生错误是因为没有要为其分配第一个矩阵的列表项#10。

trials <- list()
for (ii in seq(10, 100, by= 10)) {
  for (jj in seq(10)) {
    trials[[paste(ii)]][jj] <- generate.board(n = ii, p = 0.4)
    attributes(trials[[paste(ii)]][jj]) <- list("Time" = system.time(generate.board(n = ii, p = 0.4))[3])
  }
}

根据您的需要,有更简单的方法。对于初学者,您可以使用system.time(rials[[paste(ii)]][jj] <- generate.board())。你也可以用嵌套的lapply来做。那么你不必自己管理索引。还要检查函数microbenchmark::microbenchmark