gpt4 book ai didi

function - 在 R 中,变量与基本 R 函数同名到底有什么问题?

转载 作者:行者123 更新时间:2023-12-02 01:05:12 25 4
gpt4 key购买 nike

使用在基本 R 中具有相同名称的函数的变量名称似乎通常被认为是不好的编程习惯。

例如,很容易写:

data <- data.frame(...)
df <- data.frame(...)

现在,函数 data 加载数据集,而函数 df 计算 f 密度函数。

同样,也很容易写成:

a <- 1
b <- 2
c <- 3

这被认为是不好的形式,因为函数 c 将组合其参数。

但是:在计算线性模型的 R 函数 lm 中,data 被用作参数。换句话说,data 成为 lm 函数内的显式变量。

那么:如果 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 的一种更好的方法是:

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

几个答案还将 TTRUE 问题与函数屏蔽问题混为一谈。由于 TTRUE 不是有点超出@Andrie问题范围的函数。

关于function - 在 R 中,变量与基本 R 函数同名到底有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6135868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com