【问题标题】:Fill data frame with result from function用函数的结果填充数据框
【发布时间】: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


【解决方案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)

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2023-04-08
    • 2021-09-21
    相关资源
    最近更新 更多