В R множество функций и операторов (просто особая форма функций) векторизовано. Векторизация означает, что функция / оператор автоматически работает со всеми элементами вектора (или вектороподобного объекта).
Следовательно, наша проблема может быть решена с помощью гораздо меньшего количества кода . Кроме того, использование векторизованных функций (особенно таких базовых вещей, как +
, -
, ...) намного намного быстрее, чем зацикливание элементов.
# define function that does subtraction
sub <- function(x){
x - 2
}
# define vector with numbers ranging from 1 to 20
my_vector <- 1:20
# call function with my_vector as argument
sub(my_vector)
В связи с вашей ошибкой:
Ошибка в подпункте (x): отсутствует аргумент "x" без значения по умолчанию.
Сообщается, что вы вызвали функцию sub()
, не указав соответствующее значение для ее аргумента x
. Поскольку вы не предоставили его, и по умолчанию его нет, и он не может его найти, иначе R не знает, что делать, и выдает (выдает) ошибку.
Я могу воспроизвести вашу ошибку следующим образом:
# call sub without argument
sub()
## Error in sub() : argument "x" is missing, with no default
Я могу предотвратить это, указав значение аргумента x
, например:
# call sub with value for x
sub(1)
sub(x = 1)
... Или я могу указать значения по умолчанию следующим образом:
# define function with default values
sub <- function(x = NULL){
x - 2
}
# call new 'robust' sub() function without arguments
sub()
## numeric(0)
... Или я могу указать значения по умолчанию:
# define function with default values
sub <- function(x){
if ( missing(x) ){
x <- NULL
}
x - 2
}
# call new 'robust' sub() function without arguments
sub()
## numeric(0)
Ресурсы: