Tibbles внутри tibbles к спискам - PullRequest
1 голос
/ 17 мая 2019

У меня есть функция, которая преобразует тиблы, хранящиеся в списках, которые хранятся внутри тиббла. Это потому, что функция do делает это при использовании. Затем я применяю функцию, которая отфильтровывает определенные наблюдения.

Однако эта функция возвращает тиббл, а не список, поэтому она сохраняется как тиббл внутри тиббла, а не как список.

library(dplyr)
data(iris)

# Store observations in a list for this example
iris <- iris %>%
  group_by(Species) %>% 
  do(obs = list(.$Sepal.Length))

iris$n <- 1:3

# The function that filters data
filter_fun <- function(x, n){
  if(any(n > 2)){x <- filter(as_tibble(as.data.frame(x)), x > 2)
  } else {x <- x}
  return(x)}

# This makes two lists and a tibble inside a tibble instead of three lists
x <- iris %>%
  group_by(Species) %>% 
  do(filtered = filter_fun(x = .$obs, n = .$n))

x показывает три элемента во втором столбце, <list [1]>, <list [1]> и <tibble [0 x 1]> применительно к iris данным. Все они должны быть списками. Как изменить тиббл внутри тиббла на список, содержащий тиббл?

1 Ответ

1 голос
/ 17 мая 2019

Если нам нужен list, то обернуть вывод tibble в list в функции

filter_fun <- function(x, n){
     if(any(n > 2)){
         filter(as_tibble(as.data.frame(x)), x > 2 ) %>% list(.)
     } else x
   }
...