如何在 r 中使用 tidyverse 管道运算符复制相同的表达式?

Posted

技术标签:

【中文标题】如何在 r 中使用 tidyverse 管道运算符复制相同的表达式?【英文标题】:How to replicate the same expression with tidyverse pipe operator in r? 【发布时间】:2022-01-19 19:54:44 【问题描述】:

我想使用DT::datatble 突出显示数据中每一列中的对应值。

例如:

library(tidyverse)
data(mtcars)
mtcars <- mtcars %>% mutate(across(everything(), as.character))


datatable(mtcars[, c("vs", "am")]) %>%
  formatStyle("vs", backgroundColor = styleEqual(rep(0, sum(mtcars$vs == 0)), rep("yellow", sum(mtcars$vs == 0)))) %>%
  formatStyle("am", backgroundColor = styleEqual(rep(1, sum(mtcars$am == 1)), rep("yellow", sum(mtcars$am == 1))))

在实际情况下,我有多个列,我想迭代所有列以添加formatStyle。有没有办法在循环中复制%&gt;% formatstyle()

# something to start
l <- list()
l[["vs"]] <- 0  
l[["am"]] <- 1

datatable(mtcars[, c("vs", "am")]) %>%
lapply(l, function(i) 
   i ... # multiple formatStyle()
)

在每一列上迭代的目的不是突出vs中的1,或者am中的0

谢谢!

【问题讨论】:

【参考方案1】:

一种选择是执行for 循环并更新

library(dplyr)
library(DT)

mtcars <- mtcars %>% 
     mutate(across(everything(), as.character))

dt1 <- datatable(mtcars %>% 
          select(vs, am))
nm1 <- list(vs = 0, am = 1)
for(i in seq_along(nm1)) 
  
  dt1 <- dt1 %>%
    formatStyle(names(nm1)[i], backgroundColor = styleEqual(rep(nm1[[i]], 
        sum(mtcars$vs == nm1[[i]])), rep("yellow", sum(mtcars$vs == nm1[[i]]))))
  

dt1

-输出

【讨论】:

以上是关于如何在 r 中使用 tidyverse 管道运算符复制相同的表达式?的主要内容,如果未能解决你的问题,请参考以下文章

在这种情况下,如何在tidyverse中将数据管道传输到stat_function()?

为啥 `R` 管道运算符 `|>` 在使用 Shiny 的反应式编程中不起作用?

R:在自写包中使用 magrittr 管道运算符

在 docker (tidyverse) 中挂载 R/RStudio 可访问的本地卷

R:在自编写的包中使用magrittr管道运算符

在 R 中使用 openxlsx 进行条件格式化的 Tidyverse/更快的解决方案?