Я хотел бы использовать rowwise () и конвейер dplyr для применения функции (которая возвращает список) к каждой строке в кадре данных.
Тестовый набор данных с двумя строками:
test_tbl <- tibble(a=c(2, 4), b=c(0, 8), c=c(5, -3))
Определение простой функции (речь идет о функции, возвращающей список, очевидно, не о добавлении 8):
simple_function <- function(input) {
list(input + 8)
}
Вот чего я хотел бы добиться:
apply(test_tbl ,1, function (x) simple_function(x))
который возвращает список из 2 списков (мой желаемый результат).
Я хотел бы сохранить эти списки в виде столбца в таблице. Мы могли сделать:
test_tbl %>% mutate(output = apply(. ,1, function (x) simple_function(x)))
Я бы предпочел использовать dplyr, чем смешивать dplyr, base и pipe (также для удобочитаемости кода), но я не понимаю, почему это не работает:
test_tbl %>% rowwise() %>% simple_function
test_tbl %>% rowwise() %>% mutate(output = simple_function(.))
Обе эти функции применяют функцию ко всему кадру данных, а не к отдельным строкам. Для меня не имеет смысла, что: test_tbl %>% rowwise() %>% simple_function
идентично (с точки зрения вывода) test_tbl %>% simple_function
Это дает желаемый результат, но я считаю его довольно подробным и не идеальным, что мне нужно самому связывать столбцы:
test_tbl %>% rowwise() %>% do(output= simple_function(.)) %>% bind_cols(test_tbl, .)
Любая помощь в том, почему rowwise()
терпит неудачу, очень ценится.
test_tbl %>% mutate_all(funs(. + 8))
. Непонятно, почему на выходе должен бытьlist
. Если это не так, просто добавьте вmutate_all
- person akrun   schedule 25.09.2017