Написание функции, которая возвращает n наибольших значений для набора данных и переменной

#r #function

Вопрос:

Функция, которую я пытаюсь написать

 f <- function(x, variable.name, n) {
  order <- x[order(x$variable.name, decreasing = TRUE), ]
  head(order, n = n)
}
 

должно возвращать наибольшие n значений variable.name из набора данных x. Но при запуске функции:

 f(x=iris, variable.name="Sepal.Length", n = 5)
 

R возвращает следующее сообщение об ошибке:

 Error in order(df$var.name, decreasing = TRUE) : 
argument 1 is not a vector
 

Может ли кто-нибудь помочь мне понять, что не так с функцией? Ввод функции работает так, как задумано, когда она не находится внутри функции.

Комментарии:

1. Вы не можете использовать $ подмножество с переменной (как R узнает, ссылаетесь ли вы на буквальное имя или переменную?); вместо этого вам нужно использовать, например x[[variable.name]] .

Ответ №1:

Проблема в том, что вы пытаетесь вызвать x$variable.name , где variable.name находится строка символов, которую вы определили. Я думаю, что это не так, как $ работает. Используйте [[ вместо этого:

 f <- function(x, variable.name, n) {
  order <- x[order(x[[variable.name]], decreasing = TRUE), ] 
  head(order, n = n) 
}
 

Выход

 f(x=iris, variable.name="Sepal.Length", n = 5)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
132          7.9         3.8          6.4         2.0 virginica
118          7.7         3.8          6.7         2.2 virginica
119          7.7         2.6          6.9         2.3 virginica
123          7.7         2.8          6.7         2.0 virginica
136          7.7         3.0          6.1         2.3 virginica