【问题标题】:`dplyr::full_join()` doesn't work with list columns`dplyr::full_join()` 不适用于列表列
【发布时间】:2019-06-19 09:30:38
【问题描述】:

我正在尝试比较 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")

reprex package (v0.2.1) 于 2019 年 1 月 25 日创建

【问题讨论】:

    标签: r dplyr tidyverse tidy


    【解决方案1】:

    似乎不支持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
    

    【讨论】:

    • 什么是dotted paired
    • @IndrajeetPatil。它是从formals 创建的类型,即formals(lm) %&gt;% str# Dotted pair list of 14
    猜你喜欢
    • 1970-01-01
    • 2021-02-01
    • 2019-09-15
    • 2016-07-11
    • 2020-02-01
    • 2023-03-02
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多