Tôi muốn hiểu cách thức và cách thức này có thể đạt được bằng cách sử dụng khung gọn gàng.Sử dụng số lượng nhóm thay đổi với chức năng
Giả sử tôi có chức năng đơn giản như sau:
my_fn <- function(list_char) {
data.frame(comma_separated = rep(paste0(list_char, collapse = ","),2),
second_col = "test",
stringsAsFactors = FALSE)
}
Với danh sách dưới đây:
list_char <- list(name = "Chris", city = "London", language = "R")
chức năng của tôi hoạt động tốt nếu bạn chạy:
my_fn(list_char)
Tuy nhiên, nếu chúng ta thay đổi một số phần tử của danh sách có vectơ ký tự chúng ta có thể sử dụng hàm dplyr::do
theo cách sau đây để đạt được những điều sau:
list_char_mult <- list(name = c("Chris", "Mike"),
city = c("New York", "London"), language = "R")
expand.grid(list_char_mult, stringsAsFactors = FALSE) %>%
tbl_df() %>%
group_by_all() %>%
do(my_fn(list(name = .$name, city = .$city, language = "R")))
Câu hỏi là cách viết một hàm có thể thực hiện điều này cho một danh sách có nhiều yếu tố khác nhau. Ví dụ:
my_fn_generic <- function(list_char_mult) {
expand.grid(list_char_mult, stringsAsFactors = FALSE) %>%
tbl_df() %>%
group_by_all() %>%
do(my_fn(...))
}
Cảm ơn
Đây là một giải pháp hoàn toàn hợp lệ, tuy nhiên nó sẽ không hoạt động nếu tôi đã có một hàm trả về một data.frame với nhiều hơn một dòng. Tôi sẽ chỉnh sửa câu hỏi của mình để đảm bảo câu hỏi này rõ ràng về sau. Xin lỗi vì sự nhầm lẫn. – Christos