为什么R中的箭头赋值在转换函数调用中不起作用?

时间:2015-06-27 15:12:28

标签: r

我是R的新手,我读过的所有内容都表示通常首选箭头分配运算符a <- 1优于正常外观赋值运算符a = 1

这很好,直到我尝试使用transform()函数,我注意到赋值实际上没有发生。

因此,如果我尝试以下操作,则sum_x和mean_x不会添加到数据框中。如果我尝试更新数据框上的现有变量,则不会更新。

my_data <- data.frame(x1 = c(2, 2, 6, 4), x2 = c(3,4,2,8))
transform(my_data, sum_x <- x1 + x2, mean_x <- (x1 + x2)/2)

但是,使用=赋值运算符可以在这里工作。

my_data <- data.frame(x1 = c(2, 2, 6, 4), x2 = c(3,4,2,8))
transform(my_data, sum_x = x1 + x2, mean_x = (x1 + x2)/2)

我想理解为什么会这样,我知道何时应该使用每种分配方法,以免遇到意外的陷阱。

1 个答案:

答案 0 :(得分:2)

您被告知更喜欢&lt; - over =因为在某些情况下结果可能不明确。但是,这仅适用于您分配给变量的情况。在你的例子中,你不是。

equals =运算符用于为函数参数赋值。

转换函数使用=语法允许您修改环境,但您不是直接将结果分配给这些变量。变换正在为你做,并且因为你正在使用的特定语法而知道这样做。

诀窍就是看看帮助(在这种情况下是?变换)并遵循它。

添加一个示例来说明其重要性:

mean(x = 1:5)

表示找到1,2,3,4,5的平均值。它将1:5分配给参数x。

mean(a <- 1:5)

有效,但没有达到预期效果。没有参数a所以它创建变量a并为其分配1:5。然后在位置上与x匹配。

mean(a = 1:5)

不起作用,因为在均值函数中没有名为a的参数,而上下文使R想要进行参数赋值。