簡體   English   中英

使用 purrr / map 將自定義 function(創建 HTML 表)應用於數據幀的每一列

[英]Apply custom function (creating HTML tables) to every column of a data frame using purrr / map

我有一個自定義 function,它使用DT:datatable生成 HTML 表,並且在沒有迭代方法的情況下運行良好。

function_datatable <- function(df, input_var) {

  df %>% 
    group_by(!!enquo(input_var)) %>% 
    summarise(n = n()) %>% 
    arrange(desc(n)) %>% 
    filter(! is.na(!!enquo(input_var))) %>%
    DT::datatable()
  
}

但是,當應用於迭代方法時,它不起作用,例如使用purrr::mapmap2 我的目標是將此 function 應用於數據框/小標題的每個變量。 目標是將其應用到 R Markdown 中,其中應一個接一個地顯示各種變量。 所以語法應該是這樣的(代碼顯然不起作用)

df %>% map(function_datatable)

在嘗試不同的方法和組合時,我收到了一些不同的錯誤消息。 有些與group_by相關,而另一些與 datatable/ character class 相關。

這是一個使用 mtcars 並刪除 function 的最后一行的示例。

require(tidyverse)

dataf <- tibble(mtcars)

function_datatable <- function(col_name, df) {
  
  return(df %>% 
    group_by_at(col_name) %>% 
    summarise(n = n()) %>% 
    arrange(desc(n)) %>% 
    filter(! is.na(!!enquo(col_name))))
  
}

map(names(dataf), function_datatable, dataf)

更新了代碼(“最先進的”tidyverse 語法)。 為了處理 function 的正確編程方式,需要一些 tidyeval 的東西。 感謝@Manuel Zambelli 的map()答案!

library(tidyverse)

function_datatable <- function(input_var, df) {
  
  df %>% 
    group_by(across(all_of(input_var))) %>% 
    summarise(n = n()) %>% 
    arrange(desc(n)) %>% 
    filter(! is.na(!!rlang::sym(input_var))) %>% 
    DT::datatable()
  
}

map(names(mtcars), function_datatable, mtcars)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM