我正在为我的作业创建一个线性模型:
lm(revenue ~ (max_cpc - max_cpc.mean), data = traffic)
但它抛出:
Error in model.frame.default(formula = revenue ~ (max_cpc - max_cpc.mean), :
variable lengths differ (found for 'maxcpc.mean')
然后,通过反复试验,我稍微修改了我的代码:
lm(revenue ~ I(max_cpc - max_cpc.mean), data = traffic)
和宾果!它运作良好。
但现在我想弄清楚'我'的意义以及它如何解决我的问题。任何人都可以向我解释一下吗?
答案 0 :(得分:8)
I()
阻止公式接口解释参数,因此它会被传递给表达式解析部分。
在公式界面中,-x
表示“从预测变量中删除x”。所以我可以y~.-x
来表示'除了x'之外的所有东西。
您不希望它这样做 - 您实际上想要创建一个变量,这是两个变量的差异并对其进行回归,因此您不希望公式接口解析表达。
I()
为你实现了这一目标。
平方的术语(x^2
)也需要相同的处理。公式界面对权力做了一些特殊的事情,如果你真的想要一个变量平方,你必须I()
。
I()
在其他情境中也有其他一些用途。见?I