#r #dplyr
#r #dplyr
Вопрос:
Как я могу ссылаться на полную строку в функции печати в следующем коде:
df %>%
rowwise() %>%
mutate_at(vars(cols),
funs({ print(<REFERENCE_FULL_ROW_HERE>); . }))
Где cols
— вектор имен столбцов, которые я хочу изменить.
Комментарии:
1. Это очень похоже на проблему XY. Я не думаю, что есть какой-либо (хороший) способ сделать именно то, о чем вы просите. Но если вы расскажете нам о проблеме в целом, я думаю, мы сможем помочь вам ее решить.
2. Какой именно результат вы хотите получить?
3. Я почти решил это с помощью
.data
местоимения, но я не могу ссылаться на все нужные мне столбцы с.data[[cols]]
, это выдает ошибку.
Ответ №1:
Вы могли бы попробовать использовать pmap
или pwalk
из purrr
пакета. Я нахожу это репозиторий о рабочих процессах, ориентированных на строки, невероятно полезным для таких проблем.
Если вы хотите вызвать функцию только для ее побочного эффекта и не хотите сохранять возвращаемое значение, вы можете использовать решение с помощью pwalk
. Если вы хотите сохранить возвращаемое значение, используйте pmap
внутри mutate
вызова.
library(tidyverse)
pwalk(
head(mtcars, n = 5),
function(...) {
cols <- list(...)
print(paste(cols$cyl, cols$mpg))
}
)
#> [1] "6 21"
#> [1] "6 21"
#> [1] "4 22.8"
#> [1] "6 21.4"
#> [1] "8 18.7"
cars_wrangled <- mtcars %>%
mutate(
result = pmap(
.,
function(...) {
cols <- list(...)
paste(cols$cyl, cols$mpg)
}
)
)
head(cars_wrangled)
#> mpg cyl disp hp drat wt qsec vs am gear carb result
#> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 6 21
#> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 6 21
#> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 4 22.8
#> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 6 21.4
#> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 8 18.7
#> 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 6 18.1
Создано 2019-04-08 пакетом reprex (версия 0.2.1)