用函数的结果填充数据框

Fill data frame with result from function

我有以下代码用函数的结果逐行填充数据框。循环内函数的结果是随机的(模拟的一部分):

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 中以更少的行数和更有效的方式做到这一点。你知道如何做到这一点吗?

理想情况下,我想在创建输出数据帧的过程中传递所有参数。

像这样:

ifelse(
  matrix(runif(prod(dim(input)))+2,nrow=nrow(input)) >= 1/input,
  matrix(round(rgamma(prod(dim(input)),shape=0.8, rate=2),0),nrow=nrow(input)),
  0)