Dataframe со списком функций в виде столбца - PullRequest
2 голосов
/ 06 июня 2019

Я пытаюсь организовать смоделированные данные из разных дистрибутивов в аккуратный фрейм данных.Мой следующий код может генерировать фрейм данных со строкой для каждого распределения, столбцом, который представляет собой список функций, и столбцом, который представляет собой список симулированных данных matrices dataframes.

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, я получаю сообщение об ошибке:

Ошибка в вставке (x, collapse = ","): невозможно привести тип'замыкание' к вектору типа 'символ' '

Я могу работать с данным фреймом как есть, но не могу получить хорошие распечатки консоли для вложенных фреймов данных , и я чувствуюкак есть лучший способ (возможно, w замыкания?).Любая помощь будет высоко ценится.

1 Ответ

2 голосов
/ 06 июня 2019

Поскольку вы используете 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))
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...