R语言 如何传递带引号的字符串作为函数参数值

von4xj4u  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(223)

我面临的问题如下,我无法使用带引号的字符串作为函数参数值,这是一个程序,我正在创建一个简单的函数,以子集的数据基于字符串子集条件如下。我正在使用rlang包curly curls {{但这似乎没有工作的任何想法

adsl <- data.frame(SubjList=c(1:10), SAFFL=sample(c('Y','N'),10,replace = T))

subs <- function(data=NA,subset='SubjList!=""'){
data1 <- data %>% filter({{subset}})
  return(data1)
}

subs(data=adsl,subset = "SAFFL=='Y'")

kcwpcxri

kcwpcxri1#

编辑

一种解决方案是使用rlang包(https://rlang.r-lib.org/reference/parse_expr.html)中的parse_expr()函数和bang-bang运算符:

library(tidyverse)
library(rlang)

adsl <- data.frame(SubjList=c(1:10),
                   SAFFL=sample(c('Y','N'),10,
                                replace = T))

subs <- function(data, subset) {
  data1 <- data %>% filter(!!parse_expr((subset)))
  return(data1)
}

subs(data = adsl, subset = 'SAFFL == "Y"')
#>   SubjList SAFFL
#> 1        1     Y
#> 2        3     Y
#> 3        4     Y
#> 4        5     Y
#> 5        6     Y
#> 6        7     Y
#> 7       10     Y

创建于2022年11月30日,使用reprex v2.0.2

原始答案

一种可能的解决方案是分别指定变量(即“SAFFL”)和值(“Y”或“N”),例如

library(tidyverse)

adsl <- data.frame(SubjList=c(1:10),
                   SAFFL=sample(c('Y','N'),10,
                                replace = T))

subs <- function(data, var, value){
  data1 <- data %>% filter(.data[[var]] == value)
  return(data1)
}

subs(data = adsl, var = "SAFFL", value = "Y")
#>   SubjList SAFFL
#> 1        4     Y
#> 2        5     Y
subs(data = adsl, var = "SAFFL", value = "N")
#>   SubjList SAFFL
#> 1        1     N
#> 2        2     N
#> 3        3     N
#> 4        6     N
#> 5        7     N
#> 6        8     N
#> 7        9     N
#> 8       10     N

创建于2022年11月30日,使用reprex v2.0.2
这对你的用例有效吗?或者你需要因为某种原因一起传递变量和值吗?

相关问题