如何在 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
。有没有办法在循环中复制%>% 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 的反应式编程中不起作用?