Я пытаюсь использовать purrr :: pmap () для применения пользовательской функции в виде ряда строк в некоторых строках данных.Я могу достичь желаемого конечного результата с помощью цикла for и apply()
, но когда я пытаюсь использовать pmap()
, я могу получить желаемый результат только в сочетании с mutate (), который в моем реальном прикладном случаебудет недостаточно.
Есть ли способ использовать pmap()
, чтобы применить мою пользовательскую функцию и просто распечатать вывод, а не сохранить в новом столбце?
library(dplyr)
library(purrr)
library(tibble)
Создание демонстрационных данных и пользовательской функции
set.seed(57)
ds_mt <-
mtcars %>%
rownames_to_column("model") %>%
mutate(
am = factor(am, labels = c("auto", "manual")),
vs = factor(vs, labels = c("V", "S"))
) %>%
select(model, mpg, wt, cyl, am, vs) %>%
sample_n(3)
foo <- function(model, am, mpg){
print(
paste("The", model, "has a", am, "transmission and gets", mpg, "mpgs.")
)
}
Успешный пример циклического цикла for:
for (row in 1:nrow(ds_mt)) {
foo(
model = ds_mt[row, "model"],
am = ds_mt[row, "am"],
mpg = ds_mt[row, "mpg"]
)
}
Успешный пример с использованием apply()
:
row.names(ds_mt) <- NULL # to avoid named vector as output
apply(
ds_mt,
MARGIN = 1,
FUN = function(ds)
foo(
model = ds["model"],
am = ds["am"],
mpg = ds["mpg"]
)
)
Пример использования pmap()
в mutate()
- это почти то, что мне нужно.
ds_mt %>%
mutate(new_var =
pmap(
.l =
list(
model = model,
am = am,
mpg = mpg
),
.f = foo
))
НЕИСПРАВНОСТЬ: почему это не работает?
ds_mt %>%
pmap(
.l =
list(
model = model,
am = am,
mpg = mpg
),
.f = foo
)