gpt4 book ai didi

r - 在 rlang 表达式的准引用中使用预先存在的字符向量

转载 作者:行者123 更新时间:2023-12-02 20:28:23 25 4
gpt4 key购买 nike

有时,在使用 dplyr 时,会有一个列名称的字符向量,用于对数据进行操作,例如:

 cols_of_interest <- c("Petal.Width", "Petal.Length")

dplyr 0.5.0 及更早版本中,解决此问题的推荐方法是使用 verb_ 下划线结构,如下所示:

library("tidyverse")
my_cols <- c("Petal.Width", "Petal.Length")
iris %>%
select_(.dots = my_cols)

现在已弃用 verb_ 函数,取而代之的是 rlang 库引入的新的整洁评估框架 (dplyr.tidyverse.org/articles/programming.html)。

dplyr 0.7.0 开始,以下内容无需任何特殊调整即可工作:

library("tidyverse")
# library("rlang")
my_cols <- c("Petal.Width", "Petal.Length")
iris %>%
select(my_cols)

请注意,在 dplyr 的开发版本中,情况并非如此

动机

在 Shiny 的应用程序中选择列是一个很好的示例用例,这就是如何使用 verb_ 表示法来做到这一点

library("shiny")
library("tidyverse")
library("DT")

shinyApp(
ui = fluidPage(
selectInput("cols_to_show",
"Columns to show",
choices = colnames(iris),
multiple = TRUE),
dataTableOutput("verb_table")
),
server = function(input, output){
output$verb_table <- renderDataTable({
iris %>%
select_(.dots = input$cols_to_show)

})
}
)

最佳答案

在 0.5.0 之前的 dplyr 中,非标准评估的底层框架是 lazyeval 并且需要对字符串进行特殊考虑。 Hadley Wickham 发布了 dplyr 的全新版本,其中有一个名为 rlang 的新弱点,它为非标准评估提供了更一致的框架。这是版本 0.70 - 这里解释了为什么跳过 0.6.0 - https://blog.rstudio.org/2017/06/13/dplyr-0-7-0/

以下内容现在无需任何特殊考虑即可运行:

library("tidyverse")
my_cols <- c("Petal.Width", "Petal.Length")
iris %>%
select(my_cols)

请注意,新的 rlang 框架添加了使用 quosures 获得裸符号向量的能力

my_quos <- quos(Petal.Width, Petal.Length)
iris %>%
select(!!!my_quos)

您可以在此处阅读有关使用 dplyr 进行编程的更多信息 - http://dplyr.tidyverse.org/articles/programming.html

Shiny 比较

library("shiny")
library("tidyverse")
library("DT")
library("rlang")
shinyApp(
ui = fluidPage(
selectInput(
"cols_to_show",
"Columns to show",
choices = colnames(iris),
multiple = TRUE
),
dataTableOutput("verb_table"),
dataTableOutput("tidyeval_table")
),
server = function(input, output) {
output$verb_table <- renderDataTable({
iris %>%
select_(.dots = input$cols_to_show)

})

output$tidyeval_table <- renderDataTable({
iris %>%
select(!!!syms(input$cols_to_show))

})
}
)

关于r - 在 rlang 表达式的准引用中使用预先存在的字符向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43955905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com