tôi có các thiết lập sau dữ liệu (mẫu):Làm thế nào để lặp qua một chức năng eval gọn gàng bằng cách sử dụng purrr?
train <- data.frame(ps_ind_06_bin = c(FALSE, FALSE, FALSE, TRUE, TRUE, FALSE),
ps_ind_07_bin = c(FALSE, TRUE, TRUE, FALSE, TRUE, TRUE),
ps_ind_08_bin = c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE),
ps_ind_09_log = c(1, 3, 4, 2, 3, 2))
tôi có chức năng sau đây cho thấy một ggplot cho một hoạt động group_by()
:
get_charts1 <- function(mygroup){
quo_var <- enquo(mygroup)
train %>%
group_by(!!quo_var) %>%
count() %>%
ungroup() %>%
ggplot(aes_q(x = quo_var, y = quote(n), fill = quo_var)) +
geom_col() +
theme(legend.position = "none")
}
Nó hoạt động tốt khi tôi tự imput một tên cột , ví dụ:
get_charts1(ps_ind_07_bin)
Tuy nhiên, tôi muốn sử dụng hàm trên một số cột mà tôi đặt trên vectơ:
binarias <- train %>%
select(ends_with("bin")) %>%
colnames()
Sử dụng bản đồ và tham gia một số gợi ý, tôi cố gắng sử dụng:
listaplots <- map(quo(!!! syms(binarias)), get_charts1)
Nhưng điều này mang lại cho tôi những lỗi sau:
"Error: Can't splice at top-level"
Có ai biết những gì tôi cần phải làm gì để có được điều này để làm việc?
Loo ks như 'bản đồ (quos (ps_ind_06_bin, ps_ind_07_bin), get_charts1)' không hoạt động nên vấn đề không phải là với việc mở rộng thực sự. Dường như 'map()' chỉ bắt buộc đánh giá các tham số. – MrFlick
Chụp đối tượng cưỡng bức (bao gồm cả các quosures hoặc biểu tượng bắt buộc) sẽ hoạt động ra khỏi hộp trong phiên bản rlang tiếp theo. Điều này sẽ tương đương với unquoting. – lionel
[Tôi nên làm gì khi ai đó trả lời câu hỏi của tôi?] (Https://stackoverflow.com/help/someone-answers) – zx8754