R-在用户定义的函数R中将字符串作为字符串传递

时间:2018-10-25 10:55:14

标签: r string user-defined-functions

我正在尝试编写一个函数,该函数对包含某个字符串的数据集进行子集化。

模拟数据:

library(stringr)

set.seed(1)
codedata <- data.frame(
  Key = sample(1:10),
  ReadCodePreferredTerm = sample(c("yes", "prefer", "Had refer"), 20, replace=TRUE)
)

用户定义的功能:

findterms <- function(inputdata, variable, searchterm) {
   outputdata <- inputdata[str_which(inputdata$variable, regex(searchterm, ignore_case=TRUE)), ] 
   return(outputdata)
}

我期望至少返回几行,但是运行以下代码时我得到0:

findterms(codedata, ReadCodePreferredTerm, " refer") #the space in front of this word is deliberate

我意识到我正在尝试做一些非常简单的事情...但是无法找出为什么它不起作用。

注意,当未定义为函数时,代码可以正常工作

referterms <- codedata[str_which(codedata$ReadCodePreferredTerm, regex(" refer", ignore_case=TRUE)), ]

1 个答案:

答案 0 :(得分:0)

您可以使用dplyr和stringr轻松完成此操作

library(magrittr) # For the pipe (%>%)
library(dplyr)
library(stringr)
codedata %>%
  dplyr::filter(str_detect(ReadCodePreferredTerm, '\\brefer\\b'))

如果愿意,还可以编写自己的函数,如果不想为变量名传递字符串,则也需要rlang。像这样的作品

library(rlang) 
findterms <- function(df, variable, searchterm) {
  variable <- enquo(variable)
  return(
    df %>%
      dplyr::filter(str_detect(!!variable, str_interp('\\b${ searchterm }\\b')))
  )
}
findterms(codedata, ReadCodePreferredTerm, 'refer')