#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