使用在基本 R 中具有相同名称的函数的变量名称似乎通常被认为是不好的编程习惯。
例如,很容易写成:
data <- data.frame(...)
df <- data.frame(...)
现在,函数data
函数加载数据集df
计算 f 密度函数。
同样,也很容易写成:
a <- 1
b <- 2
c <- 3
这被认为是不好的形式,因为该函数c
将结合其论点。
But:在 R 函数的主力中,lm
,计算线性模型,data
用作参数。换句话说,data
成为内部的显式变量lm
功能。
So:如果 R 核心团队可以对变量和函数使用相同的名称,那么还有什么能阻止我们这些凡人呢?
答案并不是 R 会感到困惑。尝试下面的示例,其中我显式分配了一个名为c
。 R 根本不会混淆变量和函数之间的区别:
c("A", "B")
[1] "A" "B"
c <- c("Some text", "Second", "Third")
c(1, 3, 5)
[1] 1 3 5
c[3]
[1] "Third"
问题:变量与基本 R 函数同名到底有什么问题?
确实没有一个。 R 在查找函数时通常不会搜索对象(非函数对象):
> mean(1:10)
[1] 5.5
> mean <- 1
> mean(1:10)
[1] 5.5
> rm(mean)
> mean(1:10)
[1] 5.5
@Joris 和 @Sacha 所示的示例是糟糕的编码让您陷入困境的地方。一种更好的写作方式foo
is:
foo <- function(x, fun) {
fun <- match.fun(fun)
fun(x)
}
使用时给出:
> foo(1:10, mean)
[1] 5.5
> mean <- 1
> foo(1:10, mean)
[1] 5.5
在某些情况下,这会让你陷入困境,@Joris 的例子是na.omit
是其中之一,IIRC 之所以发生,是因为使用了标准、非标准评估lm()
.
几个答案也混淆了T
vs TRUE
功能屏蔽问题。作为T
and TRUE
不是有点超出@Andrie问题范围的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)