Вычислить определяемый пользователем вывод функции по группе в R - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь вычислить z-статистику по регулярному интервалу строк.

mean = 77
std = 31
samp.45 = rnorm(45,mean,std)

z.test = function(a, mu, sd){
zeta = (mean(a) - mu) / (sd / sqrt(length(a)))
return(zeta)
}

z.hypothesis =  function(a, mu, sd){
z.stat = z.test(a,mu,sd)
if(abs(z.stat)>1.96){
return(1)
}
else{
return(0)
 }
}

group = as.numeric(ceiling(1:45/15))
df <- as.data.frame(cbind(samp.45, group))
## Correct this
tapply(df$samp.45, as.factor(df$group), z.hypothesis(df$samp.45,mean,std)) 

Я планировал использовать tapply для выполнения вычисления функции для каждой группы и возврата выходных данных.Я знаю, что такие простые функции, как означает , могут применяться напрямую и давать желаемый результат, но как я могу получить аналогичный вывод для своей собственной функции?Любой другой подход также приветствуется.

> tapply(df$samp.45, as.factor(df$group), mean)
       1        2        3 
78.19556 79.65747 68.91818 

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

В tidyverse вы можете попробовать

library(tidyverse)
df %>% 
  group_by(group) %>% 
  summarise(zh=z.hypothesis(samp.45, MEAN, std))
# A tibble: 3 x 2
  group    zh
  <dbl> <dbl>
1     1     0
2     2     0
3     3     0

Избегайте использования внутренних имен функций в качестве имен переменных.Таким образом я переименовал mean в MEAN

0 голосов
/ 04 июня 2018

tapply(df$samp.45, as.factor(df$group), function(x) z.hypothesis(x,mean,std))

...