Вы встречаете стандартную проблему при написании R
, которая связана с вопросом standard evaluation
(SE) против non standard evaluation
(NSE). Если вам нужно больше элементов, вы можете взглянуть на это сообщение в блоге, которое я написал
Я думаю, что наиболее удобный способ написать функцию с использованием переменных - это использовать имена переменных в качестве аргументов функции. ,
Давайте снова рассмотрим пример @Muon.
# a simple function that takes x, y and z as arguments
myFun <- function(x, y, z){
result <- (x + y)/z
return(result)
}
Вопрос в том, где R
должен найти значения за именами x
, y
и z
. В функции R
сначала просматривает функциональную среду (здесь x
, y
и z
определяются как параметры), затем просматривает глобальную среду, а затем просматривает различные присоединенные пакеты.
В myFun
, R
ожидает векторы. Если вы дадите имя столбцу, вы увидите ошибку. Что произойдет, если вы хотите дать имя столбцу? Вы должны сказать R
, что имя, которое вы дали, должно быть связано со значением в области данных. Например, вы можете сделать что-то подобное:
myFun <- function(df, col1 = "x", col2 = "y", col3 = "z"){
result <- (df[,col1] + df[,col2])/df[,col3]
return(result)
}
Вы можете go гораздо дальше в этом аспекте с пакетом data.table
. Если вы начинаете писать функции, которые должны использовать переменные из фрейма данных, я рекомендую вам начать смотреть на этот пакет