R 使用矢量化编写 for 循环的最快方法

R Fastest way to write for loop using vectorization

假设我有一个简单的 for 循环,它向数据框添加一个随机值。

person <- c("Clark Kent", "Bruce Wayne", "Tony Stark", "Carol Danvers")
sleep_time <- c(8, 1, 3, 6)
data <- data.frame(person, sleep_time)

for (i in 1:length(data$person)) {
  idle <- sample(20:32, 1)
  data$idle_time[i] <- idle
}

我如何使用 R 的矢量化功能编写此代码以尽可能快地加快流程?我知道不鼓励 for 循环,但也读到应用函数并没有快太多。

如果这个问题与其他问题相似,我深表歉意。我刚开始使用 R 的矢量化功能,在理解如何在循环和更快的矢量化形式之间进行转换时遇到了一些困难。

如果您需要更多信息,请告诉我。

谢谢。

不确定您的实际用例是什么,但是对于这种特殊情况,您可以通过执行

完全摆脱 for 循环
data$idle_time <- sample(20:32, nrow(data))

如果您的行数大于 length(20:32),您可能需要包含条件 replace = TRUE