Если я хочу сделать перебор явным, я могу использовать местоимение .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)
}