передавая в качестве аргумента в г - PullRequest
0 голосов
/ 16 октября 2018

Я изо всех сил пытаюсь понять проблемы с передачей аргументов из функции в функцию R.Я обычно могу заставить это работать просто отлично, выполняя !! rlang :: sym (аргумент).

То, что я пытаюсь сделать, - это создать функцию, которая позволяет мне настраивать столбец в наборе данных, на который я хочу рассчитать данный расчет сравнения.

Например, я могу захотетьПосчитайте количество значений, равное 9999 или больше 5, или, может быть, меньше или равно 5. Этот столбец также может измениться.

custom_count=function(dataset, expr){

  result=dataset %>% summarise( sum( !!rlang::sym(expr), na.rm = TRUE)) 
  return(result)
}

custom_count(mtcars, 'mpg > 10')
custom_count( mtcars, 'vs==0')

Однако это не работает.Можно ли как-то передать эту комбинацию поля + знак сравнения + значение одновременно?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы хотите использовать enexpr, потому что вы передаете выражение, а не символ:

library(dplyr)
custom_count=function(dataset, expr){
  result=dataset %>% summarise( sum( !!rlang::enexpr(expr), na.rm = TRUE)) 
  return(result)
}

custom_count(mtcars, mpg > 10)
#   sum(mpg > 10, na.rm = TRUE)
# 1                          32
custom_count( mtcars, vs==0)
#   sum(vs == 0, na.rm = TRUE)
# 1                         18
0 голосов
/ 16 октября 2018

Мне кажется, это работает.

custom_count=function(dataset, expr){      
  result=dataset %>% summarise( sum( !!expr, na.rm = TRUE)) 
  return(result)
}

custom_count(mtcars, quote(mpg > 10))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...