在R公式中,为什么我必须使用幂函数的I()函数,如y〜I(x ^ 3)

我试图让我的头围绕使用代字符运算符和相关的函数。 我的第一个问题是为什么I()需要用来指定算术运算符? 例如,这两个图产生不同的结果(前者具有直线,后者是预期的曲线)

 x <- c(1:100) y <- seq(0.1,10,0.1) plot(y~x^3) plot(y~I(x^3)) 

另外,以下两块地块也会产生预期的结果

 plot(x^3, y) plot(I(x^3), y) 

我的第二个问题是,或许我用过的例子太简单了,但我不明白应该在哪里使用。

这里的问题是如何解释公式。 在公式中,代字号将左手侧与右手侧分开。 在公式中, ^运算符用于构造交互作用,使得x = x^2 = x^3而不是可能期望的math能力。 如果你input了(x+y)^2那么R解释器就会产生(为了它自己的良好内部使用),而不是math: x^2 +2xy +y^2 ,而是一个符号: x + y +x:y其中x:y是一个交互项。

 ?formula 

I()函数将参数转换为“as.is”,也就是你所期望的。 所以我(x ^ 2)会返回一个向量值的第二次幂。

当在回归函数中看到时,应该认为“分布为”或“依赖于”。 它意味着模型描述中的错误术语,通常被标记为“(截取)”,并且函数上下文和参数还可以进一步确定诸如log()或logit()之类的链接函数。

在plot()函数中,它基本上颠倒了plot函数通常需要的通常的( x, y )参数顺序。 写了一个plot.formula方法,以便公式可以用作与R进行通信的更“math”模式。在graphics::plot.formulacurve ,'lattice'和'ggplot'函数中,它pipe理如何显示多个因素或数字向量并且“分面”。

后来我才知道~实际上是一个中缀(或前缀)原始函数,它创build一个可以用列表提取操作符访问的R“调用”。 所有这些对于典型的用户来说都是隐藏的,但它可以是更多高级函数作者使用的工具。

在下面的注释中讨论了“+”运算符的重载,也在绘图软件包中进行:ggplot2和gridExtra在哪里分离提供对象结果的函数,所以它的作用和作为传递和分层运算符。 具有公式方法的聚合函数使用“+”作为“排列”和分组操作符。