Я столкнулся с пакетом, который использует функцию substitute
для анализа параметров в одной из своих функций. Используемая функция более или менее выглядит следующим образом:
f <- function(...) {
ref <- as.list(substitute(list(...))[-1])
# for clarity
print(ref)
counter <- 0L
for (i in ref) {
if (as.character(i[1]) == "==") {
counter <- counter + 1L
}
}
return(counter)
}
f(df1$a == df1$b, df1$b == df1$c)
#> [[1]]
#> df1$a == df1$b
#>
#> [[2]]
#> df1$b == df1$c
#> [1] 2
Создано в 2019-10-24 пакетом Представить (v0.3.0)
Я хотел бы передать df1$a == df1$b, df1$b == df1$c
как символ, но я не могу найти способ сделать это, поскольку я не могу переопределить функцию substitute
. До сих пор я пробовал несколько вариантов, но ни один из них, похоже, не работает:
char <- "df1$a == df1$b, df1$b == df1$c"
f(get(char))
#> [[1]]
#> get(char)
#> [1] 0
f(parse(text = char))
#> [[1]]
#> parse(text = char)
#> [1] 0
f(eval(parse(text = char)))
#> [[1]]
#> eval(parse(text = char))
#> [1] 0
Создан в 2019-10-24 пакетом prex (v0.3.0)
РЕДАКТИРОВАТЬ:
После ответа @ Роланда на мой первоначальный вопрос, я задаюсь вопросом, есть ли простой способ решить чуть более общий случайс функцией, использующей другой параметр:
f2 <- function(parameter, ...) {
ref <- as.list(substitute(list(...))[-1])
# for clarity
print(ref)
counter <- 0L
for (i in ref) {
if (as.character(i[1]) == "==") {
counter <- counter + 1L
}
}
return(counter)
}