【问题标题】:Creating a tibble and randomization创建一个小标题和随机化
【发布时间】:2019-04-02 22:11:04
【问题描述】:

我想用 ID (iter) 和随机生成的数据创建一个 tibble。

   iter data
  <int> <list>
1     1 <dbl [5]>
2     2 <dbl [5]>
3     3 <dbl [5]>

我尝试了两种类型的代码,其中只有一种给出了预期的结果,但我不确定为什么会这样,因为唯一的区别是在 tibble() 内部生成数据与否。

iter <- 2 ; n <- 5 ; mu <- 1
gen_data <- function(x){  # randomly draw from Exponential function
    return(rexp(n, rate=1/mu))
}

# Works (different values each time)
data <- lapply(1:iter, gen_data)
tibble(iter = 1:iter,
             data = data) %>% unnest(data)

# Doesn't work (+ there is a warning)
tibble(iter = 1:iter,
             data = lapply(1:iter, gen_data)) %>% unnest(data)

【问题讨论】:

  • 参见?tibble:“tibble() 按顺序构建列。定义列时,您可以引用调用之前创建的列。只有长度为 1 的列被回收。”在第二个示例中,iter 指的是您刚刚创建的 iter 列 (1:2)。

标签: r dplyr


【解决方案1】:

当您在第二个不起作用的示例中调用 lapply() 时,您需要仅通过其名称来引用 iter,而不是尝试重新构建向量。

tibble(iter = 1:iter,
       data = lapply(iter, gen_data)) %>% unnest(data)

这是因为tibble() 在其上下文中按名称查找变量,而iter 已经以c(1,2) 的形式存在。警告来自您将两个元素传递给:,它会抱怨,然后使用第一个元素继续前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 2021-06-11
    • 2020-08-29
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2012-09-30
    • 2020-10-21
    相关资源
    最近更新 更多