我想dplyr的功能summarise()
中使用自定義函數,如下所示:爲什麼dplyr :: summarize不能使用我的自定義函數?
library(dplyr)
# Define custom function for calculating standard error
se <- function(x) sd(x)/sqrt(length(x))
# Create a dummy data table with two groups
d <- tibble(gp = sample(c("A", "B"), 20, replace = T),
x = ifelse(gp == "A", rnorm(20), rnorm(20) + 1))
# Summarise data
d %>%
group_by(gp) %>%
summarise(x = mean(x),
se = se(x))
爲什麼我得到NA的輸出,而不是標準錯誤的正確值的值?
# A tibble: 2 × 3
gp x se
<chr> <dbl> <lgl>
1 A -0.4060173 NA
2 B 0.2999004 NA
我知道一些可能的選擇。例如,使用基本包:
tapply(d$x, d$gp, se)
但我不明白爲什麼第一個版本給出了它的結果。
這是dplyr選擇評估事物的「自然」後果。而不是前面的'x = mean(x)',試試'x1 = mean(x)'。 – joran
......想一想的一種方法是,當它達到'se = se(x)'時,dplyr必須決定「什麼是x」的答案?對這個問題有幾個「顯而易見」的答案,但是它選擇的是剛剛重新定義的版本,現在版本長度爲1,所以沒有標準偏差。 – joran
我不認爲你不使用'se'函數的版本是合理的。因爲即使這樣,它也會明白'x'只有一個值,沒有std dev。你能再檢查一次嗎? – AntoniosK