gpt4 book ai didi

r - 什么是R赋值运算符:= for?

转载 作者:行者123 更新时间:2023-12-03 13:30:15 25 4
gpt4 key购买 nike

通过深入研究 R 源代码(文件 R-3.2.2/src/main/gram.y28362852) 我发现 R 解析器/标记器认为 :=LEFT_ASSIGNMENT 标记。

但是当试图将它用作 R.3.2.2 中的赋值运算符时,
我有一个错误(无法找到 := 的函数 ...),但正如您所见,R 将其视为像 <- 这样的赋值。 :

> myVar := 42
Erreur : impossible de trouver la fonction ":="
> :=
Erreur : unexpected assignment in ":="
> <-
Erreur : unexpected assignment in "<-"

是 bug 还是 token :=需要从分词器源代码中删除吗?

有没有关于 := 的过去的故事? R中的运算符?

最佳答案

(注意:这不是对原始问题的直接回答。由于我没有足够的声誉来发表评论,并且我认为下面的信息很有用,所以我还是把它作为答案。如果有请告诉我更好的方法!)

虽然不能直接使用:=作为 =<- , :=运算符在使用非标准评估 (NSE) 的领域特定语言 (DSL) 进行编程时非常有用,例如 dplyrdata.table .下面是一个例子:

library(dplyr)
df <- tibble(
g1 = c(1, 1, 2, 2, 2),
g2 = c(1, 2, 1, 2, 1),
a = sample(5),
b = sample(5)
)

my_mutate <- function(df, expr) {
expr <- enquo(expr)
mean_name <- paste0("mean_", quo_name(expr))
sum_name <- paste0("sum_", quo_name(expr))

mutate(df,
!! mean_name := mean(!! expr),
!! sum_name := sum(!! expr)
)
}

my_mutate(df, a)
#> # A tibble: 5 x 6
#> g1 g2 a b mean_a sum_a
#> <dbl> <dbl> <int> <int> <dbl> <int>
#> 1 1. 1. 1 3 3. 15
#> 2 1. 2. 4 2 3. 15
#> 3 2. 1. 2 1 3. 15
#> 4 2. 2. 5 4 3. 15
#> # ... with 1 more row

在上面的示例中,替换 :=my_mutate 内功能与 =不会工作,因为 !! mean_name = mean(!! expr)不是有效的 R 代码。

你可以阅读更多关于 NSE 和编程的信息 dplyr here .它很好地解释了使用 dplyr 时如何处理 NSE函数来编写你自己的函数。我上面的例子是直接从网站上复制的。

关于r - 什么是R赋值运算符:= for?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com