我正在尝试将来自不同分布的模拟数据组织到一个整洁的数据框中。我的以下代码可以为每个分布生成一个数据帧,每个分布有一行,一列是函数列表,一列是模拟数据矩阵数据帧。
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)))
当我尝试使用默认的print
或glimpse
查看数据框时,出现错误:
paste(x,塌陷=“,”)中的错误:无法强制键入'closure' 到“字符”类型的向量
我可以按原样使用数据框,但是我无法得到很好的console printouts for nested dataframes,而且我觉得有更好的方法(可能是闭包吗?)。任何帮助将不胜感激。
答案 0 :(得分:2)
由于您使用的是tidyverse
,因此请使用tibble
而不是data.frame
。 data.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))
)