R:变量和同名函数

时间:2017-05-02 05:05:18

标签: r function

R允许函数和变量具有相同的名称。我用 lm 函数测试了它但是当我创建自己的函数 k 时,我收到一个错误。有人能说出我的错误是什么

> k<-function(d){2*d}
> k(5)
[1] 10
> k
function(d){2*d}
> k<-c(1,2)
> k
[1] 1 2
> k(2)
Error: could not find function "k"

适用于 lm 功能

> lm<-2
> lm
[1] 2
> lm(airquality$Ozone~., data=airquality)

Call:
lm(formula = airquality$Ozone ~ ., data = airquality)

Coefficients:
(Intercept)      Solar.R         Wind         Temp        Month          Day  
  -64.11632      0.05027     -3.31844      1.89579     -3.03996      0.27388  

> lm
[1] 2

1 个答案:

答案 0 :(得分:1)

正如@AdamQuek评论的那样,我认为lm <- 2不会覆盖lm()包中的stats函数的原因是因为该函数存在于不同的命名空间中。定义函数k()时,在本地名称空间中定义它,然后在本地名称空间中覆盖它。

R有一组规则,用于确定在评估变量/函数时它使用的命名空间的顺序。如果您已在本地将lm()定义为:

lm <- function(x) { print(x) }

然后调用lm("Hello World")确实会打印&#34; Hello World。&#34;如果您仍想使用lm()包中的stats版本,则可以使用该函数的完全限定名称:

stats::lm(...)

换句话说,如果您没有对该功能进行限定,R将首先搜索本地名称空间,然后它将搜索您已加载的库。

正如Alistaire评论的那样,请不要这样做。在任何编程语言中,应避免在常用包/库中的函数之后命名用户定义的函数。