以功能列表为列的数据框

时间:2019-06-06 19:14:12

标签: r dataframe purrr

我正在尝试将来自不同分布的模拟数据组织到一个整洁的数据框中。我的以下代码可以为每个分布生成一个数据帧,每个分布有一行,一列是函数列表,一列是模拟数据矩阵数据帧。

library(tidyverse)
N = 1000
nreps = 100

simDF <- data.frame(
  distr = c('normal', 'gamma12', 'gamma22'),
  FUN = I(list(normal = function(x) rnorm(x), gamma12 = function(x) rgamma(x, shape = 1, scale = 2), gamma22 = function(x) rgamma(x, shape = 2, scale = 2)))
)

sim_data <- function(FUN, N, nreps) return(data.frame(matrix(rnorm(N), nrow = N, ncol = nreps)))

simDF <- simDF %>% 
  mutate(data = map(FUN, function(f) sim_data(f, N, nreps)))

当我尝试使用默认的printglimpse查看数据框时,出现错误:

  

paste(x,塌陷=“,”)中的错误:无法强制键入'closure'   到“字符”类型的向量

我可以按原样使用数据框,但是我无法得到很好的console printouts for nested dataframes,而且我觉得有更好的方法(可能是闭包吗?)。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

由于您使用的是tidyverse,因此请使用tibble而不是data.framedata.frames实际上仅像原子向量一样是列。但是tibbles具有不同的打印方法,它们更能容忍“异常”内容。

simDF <- tibble(
  distr = c('normal', 'gamma12', 'gamma22'),
  FUN = list(normal = function(x) rnorm(x), gamma12 = function(x) rgamma(x, shape = 1, scale = 2), gamma22 = function(x) rgamma(x, shape = 2, scale = 2))
)