#r #statistics
Вопрос:
Я генерирую набор плотностей, используя такие функции, как dweibull и dunif. Я хотел бы иметь возможность извлекать их моменты с помощью sapply. Когда я вызываю функцию среднего значения для отдельных распределений, я получаю среднее значение, как и ожидалось. Но когда я делаю это с sapply, вместо этого кажется, что он вызывает mean() для каждого отдельного значения плотности (т. Е. Для каждого значения x, которое я предоставил двейбуллу или дунифу. Есть ли способ добиться здесь правильного поведения? Спасибо!
weib <- dweibull(seq(from=0, to=25, length=100), shape=1, scale=5)
unif <- dunif(seq(from=1, to=10, length=100), min=1, max=10)
mean(weib) #Works!
dists <- c(weib, unif)
means <- sapply(dists, mean) #Returns a very long list of values, not the mean of weib and unif
Ответ №1:
Вы должны хранить данные в виде списка. c(weib, unif)
создает единый комбинированный вектор и с помощью sapply(dists, mean)
возвращает среднее значение одного числа, т. е. само число.
dists <- list(weib, unif)
means <- sapply(dists, mean)
Комментарии:
1. Это сработало! Есть какое-нибудь объяснение, почему это имеет значение в данном случае? Спасибо!
2. Я добавил некоторые пояснения в ответ.
Ответ №2:
Вы также можете использовать фрейм данных
dists <- data.frame(weib, unif)
sapply(dists, mean)
weib unif
0.04034828 0.11111111
lapply(dists,mean)
$weib
[1] 0.04034828
$unif
[1] 0.1111111
apply(dists, 2,mean)
weib unif
0.04034828 0.11111111
Ответ №3:
Мы можем использовать map
dists <- list(weib, unif)
library(purrr)
means <- map_dbl(dists, mean)