我想创建一个ID(iter
)和随机生成的数据的小工具。
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)
答案 0 :(得分:2)
在第二个不起作用的示例中调用lapply()
时,只需引用iter
的名称即可,而不必尝试重新构建向量。
tibble(iter = 1:iter,
data = lapply(iter, gen_data)) %>% unnest(data)
这是因为tibble()
正在其上下文中按名称查找变量,并且iter
在此已经以c(1,2)
的形式存在。警告来自于您向抱怨的:
传递了两个元素,然后使用第一个元素继续前进。