我是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)
我想理解为什么会这样,我知道何时应该使用每种分配方法,以免遇到意外的陷阱。
答案 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想要进行参数赋值。