2017-08-27 5 views
0

je l'Tibble suivante:Comment afficher les éléments d'une liste dans un fichier?

data_frame(type = list(c('1','2', 'text'), c(1L ,2L), c(1.5, 2.1), c(TRUE, FALSE))) %>% 
     mutate(typeof=unlist(map(type, typeof)), 
mode= unlist(map(type, mode)), 
class= unlist(map(type, class))) 
# A tibble: 4 x 4 
     type typeof  mode  class 
    <list>  <chr>  <chr>  <chr> 
1 <chr [3]> character character character 
2 <int [2]> integer numeric integer 
3 <dbl [2]> double numeric numeric 
4 <lgl [2]> logical logical logical 

et je veux ajouter une colonne avec le contenu du type de colonne, comme:

# A tibble: 4 x 4 
     type typeof  mode  class vector 
    <list>  <chr>  <chr>  <chr> <chr> 
1 <chr [3]> character character character c('1','2', 'text') 
2 <int [2]> integer numeric integer c(1L ,2L) 
3 <dbl [2]> double numeric numeric c(1.5, 2.1) 
4 <lgl [2]> logical logical logical c(TRUE, FALSE) 

J'ai essayé unlist(map(type, quote)) mais il donne:

# A tibble: 4 x 5 
     type typeof  mode  class vector 
    <list>  <chr>  <chr>  <chr> <list> 
1 <chr [3]> character character character <symbol> 
2 <int [2]> integer numeric integer <symbol> 
3 <dbl [2]> double numeric numeric <symbol> 
4 <lgl [2]> logical logical logical <symbol> 

Je ne sais même pas ce que <symbol> est soit ...

+0

Il n'y a pas vraiment de meilleure façon de le stocker que dans 'type'. Le stocker comme un vecteur de code de code est une mauvaise idée. Pour l'afficher, il suffit de l'extraire, par ex. 'df $ type', ou utilisez' tidyr :: unnest' pour l'agrandir (une mauvaise idée dans ce cas, car les types sont incohérents). – alistaire

+0

@alistaire J'essayais juste d'imprimer une table pour apprendre à propos de la différence de ces trois fonctions – Dambo

Répondre

0

Tout d'abord, si vous utilisez le package purrr, unlist n'est probablement pas nécessaire lors de la création de l'exemple de trame de données. Nous pouvons utiliser map_chr pour obtenir la même sortie.

library(tidyverse) 
dt <- data_frame(type = list(c('1','2', 'text'), c(1L ,2L), c(1.5, 2.1), c(TRUE, FALSE))) %>% 
    mutate(typeof = map_chr(type, typeof), 
     mode = map_chr(type, mode), 
     class = map_chr(type, class)) 

Quant à votre sortie désirée, je pense que nous pouvons utiliser map_chr avec toString pour créer une chaîne de caractères avec tout le contenu dans une liste. Bien qu'il soit encore un peu différent de la sortie que vous voulez, je pense que cela sert le but de la démonstration.

dt2 <- dt %>% mutate(vector = map_chr(type, toString)) 

dt2 
# A tibble: 4 x 5 
     type typeof  mode  class  vector 
    <list>  <chr>  <chr>  <chr>  <chr> 
1 <chr [3]> character character character 1, 2, text 
2 <int [2]> integer numeric integer  1, 2 
3 <dbl [2]> double numeric numeric 1.5, 2.1 
4 <lgl [2]> logical logical logical TRUE, FALSE