2016-01-15 14 views
12

Khi tôi sử dụng chức năng lồng nhau trong một bước đường ống, thứ tự thực hiện có vẻ không trực quan.Thứ tự thực hiện các chức năng lồng nhau trong ống dplyr

df <- data.frame(a = c(1,NA,2), b = c(NA, NA, 1)) 
df %>% is.na %>% colSums # Produce correct count of missing values 
df %>% colSums(is.na(.)) # Produce NA 

Bất cứ ai có thể giải thích tại sao chức năng lồng nhau trong dòng thứ ba không tạo ra kết quả chính xác?

Trả lời

14

Đó là vì . luôn được chuyển làm đối số đầu tiên cho hàm sau. Vì vậy, trong nỗ lực thứ hai của bạn tại colSums, bạn giả sử rằng bạn đang vượt qua is.na(.) làm đối số đầu tiên cho colSums, nhưng bạn thực sự chuyển nó làm tham số thứ hai, là tham số na.rm. Vì vậy, mã của bạn thực sự trông như thế nào là df %>% colSums(x = ., na.rm = is.na(.)). Bạn có thể ngăn thông số . được chuyển làm thông số đầu tiên bằng cách sử dụng {} xung quanh chức năng. df %>% {colSums(is.na(.))}

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