Довольно много ошибок. Во-первых, это геолокация. Ваше второе место неверно, поскольку долгота может быть только от +180 до -180, поэтому -181 не существует на земле! Во-вторых, как упоминал в комментарии г-н Упсидаун, вы вызываете функцию внутри функции. Сначала исправьте геолокацию, а затем вызовы функций, которые должны исправить проблемы, которые у вас есть.
Одной из распространенных практик является разделение данных с помощью split
, а затем применение интересующей функции к этой группе. Предположим, что у нас есть четыре столбца, группа, настройки, диагноз и stay.length. Первые три имеют два уровня.
df <- data.frame(
group = sample(1:2, 64, TRUE),
setting = sample(1:2, 64, TRUE),
diagnosis = sample(1:2, 64, TRUE),
stay.length = sample(1:5, 64, TRUE)
)
> head(df)
group setting diagnosis var
1 1 1 1 4
2 1 1 2 5
3 1 1 2 4
4 2 1 2 3
5 1 2 2 3
6 1 1 2 5
Выполните split
, и вы получите разделенный List
:
dfl <- split(df$stay.length, list(df$group, df$setting, df$diagnosis))
> head(dfl)
$`1.1.1`
[1] 5 3 4 1 4 5 4 2 1
$`2.1.1`
[1] 5 4 5 4 3 1 5 3 1
$`1.2.1`
[1] 4 2 5 4 5 3 5 3
$`2.2.1`
[1] 2 1 4 3 5 4 4
$`1.1.2`
[1] 5 4 4 4 3 2 4 4 5 1 5 5
$`2.1.2`
[1] 5 4 4 5 3 2 4 5 1 2
. Затем мы можем использовать lapply
для выполнения любой функции в каждой группе в список. Например, мы можем применить mean
dflm <- lapply(dfl, mean)
> dflm
$`1.1.1`
[1] 3.222222
.
.
.
.
$`2.2.2`
[1] 2.8
. В вашем случае вы можете применить fitdist
или любую другую функцию.
dfl.fitdist <- lapply(dfl, function(x) fitdist(x, "gamma"))
> dfl
$`1.1.1`
Fitting of the distribution ' gamma ' by maximum likelihood
Parameters:
estimate Std. Error
shape 3.38170 2.2831073
rate 1.04056 0.7573495
.
.
.
$`2.2.2`
Fitting of the distribution ' gamma ' by maximum likelihood
Parameters:
estimate Std. Error
shape 4.868843 2.5184018
rate 1.549188 0.8441106
OK, ваш пример здесь не совсем воспроизводимый, но я думаю, что ответ, который вы хотите, будет выглядеть примерно так:
result <- los_data %>%
group_by(group, setting, diagnosis) %>%
do({
fit <- fitdist(.$my_column, "gamma")
data_frame(group=.$group[1], setting=.$setting[1], diagnosis=.$diagnosis[1], fit = list(fit))
}) %>%
ungroup()
Это даст вам фрейм данных всех приступов, с столбцы для группы, настройка, диагноз, а также столбец-столбец, который содержит подгонки для каждого из них. Поскольку это столбец списка, вам нужно будет использовать двойные скобки для извлечения отдельных подстановок. Пример:
# Get the fit in the first row
result$fit[[1]]
lapply
сfitdist
как функцию. И в этом работает отлично. Одна из возможностей для проблемы, с которой вы сталкиваетесь, заключается в том, что после того, как вы разделите, длина вектора ваших данных равна 1. Убедитесь, что после разделения вы имеете достаточно данных для выполненияfitdist
. вы можете использоватьlapply(dfl, length)
, чтобы найти длину своего списка – see-king_of_knowledge 16 July 2018 в 18:30