我是 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)

我想了解为什么会这样,我知道什么时候应该使用每种赋值方法,以免遇到意外的陷阱。

最佳答案

你被告知更喜欢
equals = 运算符用于为函数参数赋值。

转换函数使用 = 语法来允许您修改环境,但您不会直接将结果分配给这些变量。 transform 正在为您执行此操作,并且由于您使用的特定语法而知道这样做。

诀窍是查看帮助(在这种情况下为?transform)并遵循它。

添加一个例子来说明为什么它很重要:

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)

不起作用,因为在 mean 函数中没有称为 a 的参数,并且上下文使 R 想要进行参数分配。

关于r - 为什么 R 中的箭头赋值在转换函数调用中不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31090192/

10-12 23:55