我正在尝试创建一个从向量的每个元素中减去2的函数,每当我将向量作为参数传递给函数时,都会输出错误:
sub(x)中的错误:缺少参数“ x”,没有默认值。
所以我有一个向量叫x1 我的函数调用如下所示:sub(x1)
任何帮助将不胜感激。
sub <- function(x)
{
for(i in 1:length(x))
{
x[i] = x[i]-2
}
return(x)
}
答案 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"
我注释掉了函数定义以模拟未运行该函数定义