2017-07-27 25 views
5

Tôi không thể tìm thấy trong dplyr 0.7 cách để thay thế hàm mutate_ sẽ không còn được dùng nữa.dplyr 0,7 tương đương với việc không dùng nữa mutate_

Chức năng mutate_ hữu ích trong trường hợp sử dụng của tôi: Tôi lưu trữ trong cơ sở dữ liệu (định dạng chuỗi) nhiều hướng dẫn (có thể được lọc nếu cần) và áp dụng các hướng dẫn này cho một hoặc nhiều khung dữ liệu.

Ví dụ:

dplyr::tibble(test = "[email protected]") %>% 
    dplyr::mutate_(.dots = list("test2" = "substr(test, 1, 5)", 
           "test3" = "substr(test, 5, 5)")) 

Có cách nào để làm điều này với dplyr biến 0.7 giữ và hướng dẫn như nhân vật?

+0

Tài liệu '? Mutate_' states" dplyr hiện sử dụng ngữ nghĩa đánh giá gọn gàng ", tham khảo gói rlang có họa tiết" đánh giá gọn gàng ". Chúc may mắn nếu bạn đi xuống con đường đó. – Frank

Trả lời

6

Để mở rộng một chút về dụ MrFlick 's, chúng ta hãy giả sử bạn có một số hướng dẫn lưu dưới dạng chuỗi, cũng như những cái tên tương ứng mà bạn muốn gán cho những tính toán kết quả:

ln <- list("test2", "test3") 
lf <- list("substr(test, 1, 5)", "substr(test, 5, 5)") 

phù hợp lên tên để hướng dẫn họ và chuyển đổi tất cả mọi thứ để quosures:

ll <- setNames(lf, ln) %>% lapply(rlang::parse_quosure) 

Theo aosmith 's đề nghị, toàn bộ danh sách bây giờ có thể được chuyển sang đột biến, sử dụng !!! điều hành đặc biệt:

tibble(test = "[email protected]") %>% mutate(!!! ll) 
# # A tibble: 1 x 3 
#  test test2 test3 
#  <chr> <chr> <chr> 
# 1 [email protected] [email protected]  @ 
+1

Bạn cũng có thể làm 'biến đổi (X, !!! ll)' thay vì toàn bộ 'do.call'. – aosmith

+0

Ý tưởng tuyệt vời, aosmith. Tôi sẽ cập nhật câu trả lời. Cảm ơn. –

+0

Cảm ơn rất nhiều MrFlick, Artem và aosmith! – stephLH

3

Dưới đây là về thay thế

a <- "test2" 
b <- "test3" 
dplyr::tibble(test = "[email protected]") %>% 
dplyr::mutate(a := !!rlang::parse_quosure("substr(test, 1, 5)"), 
    b := !!rlang::parse_quosure("substr(test, 5, 5)")) 
# # A tibble: 1 x 3 
#  test  a  b 
#  <chr> <chr> <chr> 
# 1 [email protected] [email protected]  @ 

Chúng tôi sử dụng := điều hành để tự động đặt tên các tham số với chuỗi, và chúng tôi phân tích chuỗi biểu hiện cho sự chuyển đổi và Unwrap nó với '!!'

Các vấn đề liên quan