gpt4 book ai didi

r - 在 tidyeval 框架中避免越界

转载 作者:行者123 更新时间:2023-12-04 18:21:28 28 4
gpt4 key购买 nike

如果我想明确覆盖范围,我可以使用 .data像这样的代词

library(dplyr)

cyl <- 3
transmute(as_tibble(mtcars), cyl_plus_one = .data$cyl + 1)
#> # A tibble: 32 x 1
#> cyl_plus_one
#> <dbl>
#> 1 7
#> 2 7
#> 3 5
#> 4 7
#> 5 9
#> 6 7
#> 7 9
#> 8 5
#> 9 5
#> 10 7
#> # ... with 22 more rows

但是,相反的情况呢,即如果我想避免明确地超出范围?在下面的示例中,我想添加一个包含值 b 的新列。 (通过函数调用提供,而不是数据中的 b)加 1,这显然不像现在所说的那样工作(因为超出范围)。

library(dplyr)
add_one <- function(data, b) {
data %>%
mutate(a = b + 1)
}
data <- data_frame(
b = 999
)
add_one(data, 3)
#> # A tibble: 1 x 2
#> b a
#> <dbl> <dbl>
#> 1 999 1000

我还尝试在 mutate() 之外创建新值打电话,但后来还是要靠 new_val不在数据中。

library(dplyr)
add_one <- function(data, b) {
new_val <- b + 1
data %>%
mutate(a = new_val)
}

最佳答案

只需取消引用 !!在数据框范围上方查找具有该名称的变量:

library(tidyverse)

add_one <- function(data, b) {
data %>% mutate(a = !!b + 1)
}

data <- data_frame(b = 999)

add_one(data, 3)
#> # A tibble: 1 x 2
#> b a
#> <dbl> <dbl>
#> 1 999 4.00

关于r - 在 tidyeval 框架中避免越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48232141/

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