[英]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::map
或map2
。 我的目標是將此 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.