Это нестандартная оценка . Если вы хотите использовать пустые имена столбцов, как это обычно делается в dplyr
функциях, вам нужно использовать enquo
для создания предложения. Затем, когда вы вызываете эту переменную, вам нужно !!
перед ее именем. Попробуйте это:
function1 <- function(VarName){
var <- enquo(VarName)
results <<- tabl_profil1 %>% summarise(Mean = mean(!!var))
}
function1(Age)
В ответ на обсуждение в комментариях: использование <<-
внутри такой функции не является хорошей идеей по нескольким причинам. Во-первых, это означает, что вы определяете функцию, которая действует только на конкретный фрейм данных, в данном случае tabl_profil1
, и возвращает результаты только определенной переменной, в данном случае, присваивая обратно results
. Это в значительной степени противоречит цели написания функции, которая заключается в гибком повторении операции.
<<-
использовать этот способ также не так уж безопасно, так как в итоге вы получите значение, хранящееся в results
, которое может не знать точно, откуда оно взято. Лучше иметь возможность сказать, что вы вызвали функцию и вернули вывод определенной переменной, и вы можете видеть в своем коде, где именно вы это сделали.
Кроме того, преимущество модели dplyr
заключается в том, что вы можете работать с фреймом данных в функции и передавать данные в следующую функцию. Вы теряете это, не имея фрейма данных в качестве первого аргумента.
Лучший способ структурировать эту функцию:
function1 <- function(df, VarName){
var <- enquo(VarName)
df %>% summarise(Mean = mean(!!var))
}
Теперь эта функция работает с любым фреймом данных, который вы передаете, и добавляет к этому фрейму данных среднее значение любой переменной, которую вы включаете в качестве второго аргумента. Теперь вы можете назвать что-то вроде:
mean_age <- function1(tabl_profil1, Age)
mean_height_from_other_tbl <- function1(other_table, Height)
Это работает с несколькими фреймами данных и возвращает выходные данные, которые можно сохранить в любую переменную, которую вы хотите. Очевидно, я сделал второй звонок в качестве иллюстрации.