【发布时间】:2015-02-18 09:49:10
【问题描述】:
我有以下代码用函数的结果逐行填充数据框。循环内函数的结果是基于随机的(模拟的一部分):
input <- as.data.frame(matrix(seq(1:20),4,5), row.names = c("A", "B", "C", "D"))
output <- data.frame()
j = 1
for (rowname in rownames(input)) {
output <- rbind(output,ifelse(runif(5)+2>=rep(1/input[j,1],5),round(rgamma(5,shape=0.8, rate=2),0),rep(0,5)))
j = j+1
}
rownames(output) <- rownames(input)
我想避免使用 for 循环,我想应该有一种方法可以在 R 中以更少的行数和更有效的方式做到这一点。你知道如何做到这一点吗?
理想情况下,我想在创建输出数据框的过程中传递所有参数。
【问题讨论】:
-
@akrun 我认为我们正在尝试循环尽可能多的行数。
-
我知道,我只是用它来遍历数据框。我敢肯定,有更好的方法(也许是“长度”),我对 R 的了解太有限了。我要避免的核心问题是 for 循环。
-
请说明循环内部发生了什么。
-
@zx8754 我添加了对循环内部发生的事情的简要说明。然而,我想,在这种情况下避免 for 循环的方法并不依赖于 ifelse 函数。它可以是任何其他返回向量的函数。
标签: r function for-loop dataframe rbind