Я создаю функцию, позволяющую моим коллегам легко анализировать некоторые предварительно определенные наборы данных. Я хотел бы, чтобы они могли передавать аргументы «i» для выбора строк. Чтобы сделать его более надежным, я хотел бы иметь возможность передать этот аргумент с кавычками или без них.
Вот пример, который работает с кавычками…
x <- data.table(x = c(1,1,1,2,2,2,3,3,3),
sex = c("M", "M", "F","M", "F","M", "F","M", "F"))
test.function <- function(my.dt, ...){
where <- parse(text = paste0(list(...)))
my.dt <- my.dt[eval(where), ]
return(my.dt)
}
tmp <- test.function(x, 'x==3 | sex=="F"')
head(tmp)
Если я удалю кавычки, произойдет сбой, сказав «объект« секс »не найден»…
x <- data.table(x = c(1,1,1,2,2,2,3,3,3),
sex = c("M", "M", "F","M", "F","M", "F","M", "F"))
test.function <- function(my.dt, ...){
where <- parse(text = paste0(list(...)))
my.dt <- my.dt[eval(where), ]
return(my.dt)
}
tmp <- test.function(x, x==3 | sex=="F")
head(tmp)
В дополнение к вышесказанному, у меня есть много неудачных попыток с использованием цитаты, подстановки и rlang: как этот неудачный пример ...
x <- data.table(x = c(1,1,1,2,2,2,3,3,3),
sex = c("M", "M", "F","M", "F","M", "F","M", "F"))
test.function <- function(my.dt, ...){
where <- rlang::quos(...)
my.dt <- my.dt[!!where, ]
return(my.dt)
}
tmp <- test.function(x, 'x==3 | sex=="F"')
head(tmp, 10)
В дополнение к любым идеям для решений, я был бы признателен, если бы кто-то мог указать мнек онлайн-ресурсу простаков для понимания символов / выражений / цитат / и т. д. Когда я углубился в эту проблему, я понял, что у меня есть серьезные пробелы в моем понимании того, как работает R.
Кстати, я уже прочитал следующее, но ни один из них не смог мне помочь: Передача аргумента функции в data.table i и Передача нескольких аргументов в data.table внутри функции .