2017-12-14 96 views
9

Hãy xem xét các dữ liệu đồ chơi sau và tính toán:Dplyr sản xuất NaN trong khi cơ sở sản xuất R NA

library(dplyr) 

df <- tibble(x = 1) 

stats::sd(df$x) 

dplyr::summarise(df, sd_x = sd(x)) 

Kết quả tính toán đầu tiên trong NA trong khi thứ hai, khi tính toán được bao gồm trong các chức năng dplyr summarise sản xuất NaN. Tôi mong đợi cả hai tính toán để tạo ra kết quả tương tự và tôi tự hỏi tại sao chúng khác nhau?

+0

Bản sao có thể có của [Sự khác biệt giữa NaN và Inf, và NULL và NA trong R?] Là gì (https://stackoverflow.com/questions/15496361/what-is-the-difference-between-nan-and -inf-và-null-và-na-in-r) – PoGibas

+1

Tôi có thể sao chép. dplyr phiên bản 0.7.4 - phiên bản mới nhất từ ​​CRAN. –

+0

Tương tự ở đây. Tuy nhiên, bạn cần điều đó để làm gì? Nếu bạn hỏi 'is.na()', cả hai trả về 'TRUE'. – loki

Trả lời

6

Gọi điện là một chức năng khác. Tôi không rõ chức năng là gì, nhưng nó không phải là stats.

dplyr::summarise(df, sd_x = stats::sd(x)) 
# A tibble: 1 x 1 
    sd_x 
    <dbl> 
1 NA 

debugonce(sd) # debug to see when sd is called 

Không gọi đây:

dplyr::summarise(df, sd_x = sd(x)) 
# A tibble: 1 x 1 
    sd_x 
    <dbl> 
1 NaN 

Nhưng gọi đây:

dplyr::summarise(df, sd_x = stats::sd(x)) 
debugging in: stats::sd(1) 
debug: sqrt(var(if (is.vector(x) || is.factor(x)) x else as.double(x), 
    na.rm = na.rm)) 
... 

Cập nhật

Dường như sd trong summarise được tính bên ngoài của R, gợi ý tại trong tệp tiêu đề này: https://github.com/tidyverse/dplyr/blob/master/inst/include/dplyr/Result/Sd.h

Một số hàm dường như được định nghĩa lại bởi dplyr. Cho rằng var cho kết quả tương tự trong cả hai trường hợp, tôi nghĩ rằng hành vi sd là một lỗi.

+0

bạn là gì R dplyr và phiên bản R? Tôi ngạc nhiên rằng tôi không thể tái sản xuất lỗi ... – storaged

+0

Tôi cũng nhận được 'NA' khi tôi làm' dplyr :: mutate (df, var_x = var (x)) '. Tôi đã chấp nhận câu trả lời này dựa trên gợi ý rằng hành vi là một lỗi. – ricke

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