R - передача строки в виде строки в пользовательской функции R - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь написать функцию, которая устанавливает подмножество набора данных, содержащего определенную строку.

Макет данных:

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 голосов
/ 07 ноября 2018

Вы можете использовать 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')
...