gt包R中的递归magritr管道/回路

efzxgjgh  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(132)

我尝试将gt包中的data_color()函数应用于数据框中的几列,但每列都有自己的调色板域,目前为止,我得到的结果是:

df <- data.frame(Var1 = rnorm(30),
                 Var2 = rnorm(30),
                 Var3 = rnorm(30),
                 Var4 = rnorm(30),
                 Var5 = rnorm(30),
                 Var6 = rnorm(30))

mypals <- list()
for (i in 2:6){
  mypals[[i]] <- scales::col_bin(colpal,
                                 domain = c(min(df[,i]), max(df[,i])))
}

df %>%
  gt() %>%
  data_color(columns = 2, colors  = mypals[[2]]) %>%
  data_color(columns = 3, colors  = mypals[[3]]) %>%
  data_color(columns = 4, colors  = mypals[[4]]) %>%
  data_color(columns = 5, colors  = mypals[[5]]) %>%
  data_color(columns = 6, colors  = mypals[[6]])

有没有一种方法可以做一个“递归”的管道,类似的东西也许?

df %>%
  gt() %>% seq(2:6) %>% (function(x){
    data_color(columns = x, colors = mypals[[x]])
  }
    
  )

提前感谢您的所有建议。我是gt软件包的新手,所以如果有更简单的方法,请原谅我。

rwqw0loc

rwqw0loc1#

我不能通过y测试这个答案,因为我不能安装这个gt包,但是我相信你正在从purrr包中寻找accumulatereduce函数。

library(purrr)

my_data_color <- \(x, y, z) data_color(x, columns = y, colors = z[[y]])

reduce2(df %>% gt(),
            1:6,
            ~ my_data_color(x = .x,
                            y = .y,
                            z = mypals))

man 页:

  • reduce()是一个将向量元素组合为单个值的操作,该组合由.f驱动,它是一个二元函数,接受两个值并返回单个值:将f减小到1:3,计算出值f(f(1,2),3)。*
w8rqjzmb

w8rqjzmb2#

一种方法是生成语句并使用eval(parse(text=<stment>)),如下所示:

eval(parse(text=paste(
  "df %>% gt() %>%",
  paste0("data_color(columns=",2:6,",color='",mypals,"')", collapse=" %>% ")
)))

相关问题