我有以下代码用行按行填充数据框的结果。循环内部函数的结果是基于随机的(模拟的一部分):
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中更有效的方式来做这个。你知道怎么做吗?
理想情况下,我想在创建输出数据框期间传递所有参数。
答案 0 :(得分:1)
这样的事情:
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)