прохождение вектора для функции в R - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь создать функцию, которая вычитает 2 из каждого элемента вектора, и всякий раз, когда я передаю вектор в качестве параметра функции, она выдает ошибку:

Ошибка в подпункте (x): отсутствует аргумент "x" без значения по умолчанию.

поэтому у меня есть вектор, который называется х1, и мой вызов функции выглядит так: sub (x1)

любая помощь будет оценена.

sub <- function(x)
{
   for(i in 1:length(x))
   {
      x[i] = x[i]-2
   }
   return(x)
}

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

В 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)

Ресурсы:

0 голосов
/ 02 ноября 2018

Полагаю, вы забыли запустить определение функции:

sub2 <- function(x)
{
  for(i in 1:length(x))
  {
    x[i] = x[i]-2
  }
  return(x)
}
sub2(1:4) ## works fine

sub(1:4) ## Error calling the function sub(pattern, replacement, x, ...)

Ошибка в подпункте (1: 4): аргумент "x" отсутствует, по умолчанию нет

или

> x1 <- 1:4
> sub(x1) ## Error
Error in sub(x1) : argument "x" is missing, with no default

Если вы выбрали бы другое имя для своей функции (не имя существующей R-функции), сообщение будет четким (для запуска в новом R-сеансе):

# sub2 <- function(x)
# {
#   for(i in 1:length(x))
#   {
#     x[i] = x[i]-2
#   }
#   return(x)
# }
sub2(1:4)
# > sub2(1:4)
# Error in sub2(1:4) : could not find function "sub2"

Я прокомментировал определение функции для имитации не работает определение функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...