gpt4 book ai didi

r - purrr::map中的第一个波浪号是什么意思

转载 作者:行者123 更新时间:2023-12-03 19:58:19 31 4
gpt4 key购买 nike

我正在查看使用mapexample。这里是:

mtcars %>%
split(.$cyl) %>% # from base R
map(~ lm(mpg ~ wt, data = .))


map(~ lm...中的第一个波浪号是什么意思?也就是说,R如何解释第一个波浪号? (我知道第二个波浪号表示一个功能...)。询问的另一种方式是,为什么下面的方法不起作用?

mtcars %>%
split(.$cyl) %>% # from base R
map(lm(mpg ~ wt, data = .))

最佳答案

根据map help documentationmap需要一个函数,但它也接受公式,字符向量,数字向量或列表,后者被转换为函数。

R中的~运算符将创建公式。所以~ lm(mpg ~ wt, data = .)是一个公式。公式在R中很有用,因为它们会阻止立即评估符号。例如,您可以定义

x <- ~f(a+b)


无需在任何地方定义 fab。在这种情况下, ~ lm(mpg ~ wt, data = .)基本上是 function(x) {lm(mpg ~ wt, data = x)}的快捷方式,因为 map可以根据需要更改公式中 .的值。

如果没有波浪号, lm(mpg ~ wt, data = .)只是R中的一个表达式或调用,将立即对其进行求值。 .不会在调用时定义,并且 map不能将其转换为函数。

您可以使用 map()函数将这些公式转换为 purrr::as_mapper()之外的函数。例如

myfun <- as_mapper(~lm(mpg ~ wt, data = .))
myfun(mtcars)
# Call:
# lm(formula = mpg ~ wt, data = .)
#
# Coefficients:
# (Intercept) wt
# 37.285 -5.344

myfun
# <lambda>
# function (..., .x = ..1, .y = ..2, . = ..1)
# lm(mpg ~ wt, data = .)
# attr(,"class")
# [1] "rlang_lambda_function"


您可以看到 .如何成为传递给该函数的第一个参数。

关于r - purrr::map中的第一个波浪号是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834446/

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