当前位置: 首页 > 知识库问答 >
问题:

如何在函数中的if条件中使用dplyr NSE?

宗弘扬
2023-03-14

我有一个接受NSE参数的函数。

假设我有一个tibble,其中有一列需要订购。我想创建一个函数,它可以根据函数参数中输入的名称对列名进行排序。但是,如果我不使用参数,我希望它不对列进行排序,因此我使用< code>column_name = NULL作为默认参数(或< code>column_name = NA)

sort_tibble <- function(column_name = NULL) {
  tibble_data <- tibble::tibble(NSE_name = c(0.2, -0.4, 1.7, 0.09, -0.6, -1))
  if (!is.null(({{ column_name }}))) {
    tibble_data <- tibble_data %>% arrange({{ column_name }})

    # Do stuff
  }
}

sort_tibble(NSE_name)
#> Error in sort_tibble(NSE_name): objet 'NSE_name' not found

创建于 2022-04-11 由 reprex 软件包 (v2.0.1)

然而,尽管引号{{var}或rlang::eval_。它找不到它,因为它不是一个变量,而是一个整洁的计算,除非它没有在整洁的函数中使用。

共有1个答案

江英卓
2023-03-14

我终于找到了解决方案!

这里的想法不是直接尝试使用{{var}}为dplyr注入数据,而是首先使用一个字符串作为函数参数输入,并允许使用< code>sym()和< code >通过dplyr对其进行求值!!。这允许在函数中进行其他非整齐的操作,包括设置数据框的子集或者只是评估参数是否为空(这是我的if函数的条件)。

我提到https://tidyeval.tidyverse.org/sec-why-how.html#unquoting-代码

使用 sym() 将字符串转换为符号。符号需要在 dplyr 中作为列进行评估

sym("NSE_name")
# NSE_name

然后使用< code >!!将评估注入到代码中

library(tidyverse)
f1 <- function(order = NULL) {
  df <-
    tibble::tibble(NSE_name = c(0.2, -0.4, 1.7, 0.09, -0.6, -1))
  f2(order = order)
}

f2 <- function(order = NULL) {
  if (!is.null(order)) {
    
    ordered_df <- df %>% arrange(!!sym(order))
    return(ordered_df)
  }
  else print ("No order")
}

f1(order = "NSE_name")
f1()


 类似资料:
  • 如何在钩子的if块中调用redux操作: 我有两个选择框。如果此人在选择框中键入,我将的选定id存储在状态中。如果用户选择了一个组,我将它存储在中,所以只有在两个条件都匹配的情况下,我才需要调用APIendpoint来获取。 如果我注释这段代码,就没有错误。如何使代码片段工作?

  • 我无法使用UDPATE AND IF条件更新表中的2个字段。需要帮助。 我有一个发票表格,如果字段号=0,我需要从同一表格中的容量和字段号=1更新字段数量。 我的sql语句不起作用: 错误消息: -您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在第1行的“IF(Nos=0)WHERE id=id”附近使用的正确语法

  • 如果这是一个愚蠢的问题,请事先原谅我。 所以,我目前正在检查WooCommerce购物车中的所有物品。 如果购物车中有一个产品属于“Practice”类别,而购物车中没有“Qualification”类别的产品,我想显示消息1 如果“练习”和“资格”类别都在购物车中,我想显示消息2。 现在,这是我的代码: 我有两个产品各有一个类别,一个有“练习”类别,一个有“资格”类别。 当我将这两个产品添加到购

  • 问题内容: 我有两个表,一个表用于新闻,另一个表用于评论,我想获取其状态已设置为批准的评论数。 但是此查询的问题在于,无论是否存在与该新闻相对应的评论,为评论列获取的最小值为1。 任何帮助将是非常可贵的。 问题答案: 使用代替 请尝试以下方法:

  • 但是,VSC告诉我“构造函数调用必须是构造函数中的第一条语句”。我怎样才能克服这个问题?

  • 我想为创建If condition,当评论的值如下时,我为变量Comment创建If Conditional 因为我在一个布局中有不同的设计和不同的功能,如果我创建*ex2Layout,它不是高效的*我想 但我有错误: 问题就在这里: 谁能建议我?