将向量传递给R中的函数

时间:2018-11-02 08:09:53

标签: r

我正在尝试创建一个从向量的每个元素中减去2的函数,每当我将向量作为参数传递给函数时,都会输出错误:

  

sub(x)中的错误:缺少参数“ x”,没有默认值。

所以我有一个向量叫x1 我的函数调用如下所示:sub(x1)

任何帮助将不胜感激。

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

2 个答案:

答案 0 :(得分:3)

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

关于您的错误:

  

sub(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)

资源:

答案 1 :(得分:1)

我想您忘记运行函数定义了:

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, ...)
  

sub(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"

我注释掉了函数定义以模拟未运行该函数定义