Доступ к предыдущему определению / ссылке точки (.) в dplyr

#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)