代码之家  ›  专栏  ›  技术社区  ›  Indrajeet Patil

` dplyr::full_join()`不适用于列表列

  •  2
  • Indrajeet Patil  · 技术社区  · 6 年前

    我试图比较R包中给定函数的两个版本的形式 ggstatsplot . 我已经能够提取表格,但我似乎不能让这两个表加入。 dplyr::full_join() 产生了一个错误,但不清楚它会导致什么。如果有任何关于如何加入这两个数据帧的反馈,我将不胜感激。

    # setup
    set.seed(123)
    library(tidyverse)
    library(ggstatsplot)
    
    # formals for the primary version of the function
    (df_primary <- tibble::enframe(formals(ggstatsplot::gghistostats)) %>%
      dplyr::rename(.data = ., primary = value))
    #> # A tibble: 41 x 2
    #>    name        primary  
    #>    <chr>       <list>   
    #>  1 data        <NULL>   
    #>  2 x           <missing>
    #>  3 binwidth    <NULL>   
    #>  4 bar.measure <chr [1]>
    #>  5 xlab        <NULL>   
    #>  6 title       <NULL>   
    #>  7 subtitle    <NULL>   
    #>  8 caption     <NULL>   
    #>  9 type        <chr [1]>
    #> 10 test.value  <dbl [1]>
    #> # ... with 31 more rows
    
    # formals for the grouped version of the function
    (df_grouped <- tibble::enframe(formals(ggstatsplot::grouped_gghistostats)) %>%
      dplyr::rename(.data = ., grouped = value))
    #> # A tibble: 43 x 2
    #>    name         grouped  
    #>    <chr>        <list>   
    #>  1 data         <missing>
    #>  2 x            <missing>
    #>  3 grouping.var <missing>
    #>  4 title.prefix <NULL>   
    #>  5 binwidth     <NULL>   
    #>  6 bar.measure  <chr [1]>
    #>  7 xlab         <NULL>   
    #>  8 subtitle     <NULL>   
    #>  9 caption      <NULL>   
    #> 10 type         <chr [1]>
    #> # ... with 33 more rows
    
    # joining the two dataframes name
    dplyr::full_join(
      x = df_primary,
      y = df_grouped,
      by = "name"
    )
    #> Error: type not supported
    
    traceback()
    #> 4: stop(list(message = "type not supported", call = NULL, cppstack = NULL))
    #> 3: full_join_impl(x, y, by_x, by_y, aux_x, aux_y, na_matches, environment())
    #> 2: full_join.tbl_df(x = tibble::enframe(formals(ggstatsplot::gghistostats)) %>% 
    #> dplyr::rename(.data = ., primary = value), y = tibble::enframe(formals(ggstatsplot::grouped_gghistostats)) %>% 
    #> dplyr::rename(.data = ., grouped = value), by = "name")
    #> 1: dplyr::full_join(x = tibble::enframe(formals(ggstatsplot::gghistostats)) %>% 
    #> dplyr::rename(.data = ., primary = value), y = tibble::enframe(formals(ggstatsplot::grouped_gghistostats)) %>% 
    #> dplyr::rename(.data = ., grouped = value), by = "name")
    

    创建于2019-01-25 reprex package (v0.2.1)

    1 回复  |  直到 6 年前
        1
  •  1
  •   akrun    6 年前

    似乎是 dotted paired 不支持类型。有一件事,我们可以把它转换成正常的 list 然后做 full_join

    formals(ggstatsplot::gghistostats) %>% 
         as.list %>% 
         tibble::enframe(value = 'primary') %>% 
         full_join(formals(ggstatsplot::grouped_gghistostats) %>% 
                     as.list %>% 
                     tibble::enframe(value = 'grouped'))
    # A tibble: 40 x 3
    #   name        primary   grouped  
    #   <chr>       <list>    <list>   
    # 1 data        <NULL>    <missing>
    # 2 x           <missing> <missing>
    # 3 binwidth    <NULL>    <NULL>   
    # 4 bar.measure <chr [1]> <chr [1]>
    # 5 xlab        <NULL>    <NULL>   
    # 6 title       <NULL>    <NULL>   
    # 7 subtitle    <NULL>    <NULL>   
    # 8 caption     <NULL>    <NULL>   
    # 9 type        <chr [1]> <chr [1]>
    #10 test.value  <dbl [1]> <dbl [1]>
    # … with 30 more rows