R programlama dili ile çalışıyorum. 100 Veri kümesi oluşturan aşağıdaki kodum var (sabit bir bileşen ve rastgele bir bileşen içeren):
a = rnorm(300,10,5)
b = rnorm(300,3,1)
c = rnorm(300,12,1)
e = "original"
d = data.frame(a,b,c,e)
results <- list()
for (i in 1:100){
a = rnorm(100,10,10)
b = rnorm(100,10,10)
c = rnorm(100,10,10)
e = "simulated"
d_i = data.frame(a,b,c,e)
data_i = rbind(d, d_i)
data_i$iteration = i
results[[i]] <- data_i
}
results_df <- do.call(rbind.data.frame, results)
Şu anda, bu 100 veri kümesinin tümü aynı dosyaya yerleştirildi ("results_df"). Şimdi, "results_df" dosyasını bu 100 veri kümesinin her birine bölmek istiyorum (dizin olarak "yineleme" sütununu kullanarak):
results_df$iteration = as.factor(results_df$iteration)
X<-split(results_df, results_df$iteration)
Bu " X "dosyası, aşağıdaki gibi listelenen 100 veri kümesinin her biriyle bir "liste" gibi görünüyor:
Bu dosyaların her birine kullanarak "dizin" i çağırarak erişebilirim i
, mesela.
> head(X$`1`)
a b c e iteration
1 2.141495 3.984072 12.73344 original 1
2 8.769269 4.267464 11.32566 original 1
3 5.413573 2.823608 12.06713 original 1
4 11.710470 3.710500 12.20715 original 1
5 14.423155 2.944178 10.56673 original 1
6 6.886629 2.843195 12.43074 original 1
> head(X$`2`)
a b c e iteration
401 2.141495 3.984072 12.73344 original 2
402 8.769269 4.267464 11.32566 original 2
403 5.413573 2.823608 12.06713 original 2
404 11.710470 3.710500 12.20715 original 2
405 14.423155 2.944178 10.56673 original 2
406 6.886629 2.843195 12.43074 original 2
> head(X$`98`)
a b c e iteration
38801 2.141495 3.984072 12.73344 original 98
38802 8.769269 4.267464 11.32566 original 98
38803 5.413573 2.823608 12.06713 original 98
38804 11.710470 3.710500 12.20715 original 98
38805 14.423155 2.944178 10.56673 original 98
38806 6.886629 2.843195 12.43074 original 98
Sorum şu: Şimdi bu 100 veri kümesinin her birinde doğrusal regresyon gerçekleştiren, regresyon katsayılarını kaydeden ve bunları tek bir dosyaya yerleştiren başka bir işlev yazmak istiyorum. Bunun için kodu yazmaya çalıştım.:
results_1 <- list()
for (i in 1:100){
model_i <- lm(a ~ b +c, data = X$`i`)
coeff_i = model_i$coefficients
results_1[[i]] <- coeff_i
}
results_df_1 <- do.call(rbind.data.frame, results_1)
İlk bakışta, bu işe yaramış gibi görünüyor-ancak bu, tüm regresyon katsayılarını aynı olarak gösteriyor. Regresyon modeli farklı veri kümelerinde 100 kez çalıştırıldığı için bu mümkün değildir :
#for some reason, the column names have been corrupted
hist(results_df_1$c.14.5741211250235..14.5741211250235..14.5741211250235..14.5741211250235.., main = "first coeff")
hist(results_df_1$c..0.105285805666629...0.105285805666629...0.105285805666629.., main = "second coeff")
hist(results_df_1$c..0.236548691738492...0.236548691738492...0.236548691738492.., main = "third coeff")
Lütfen birisi bana bu sorunu çözmeye yardımcı olabilir? R'deki "split ()" işlevini kullandığınızda, gelecekteki komutlarda" bölünmüş bileşenleri "" çağırmanın "doğru yolu bu mu ?
model_i <- lm(a ~ b +c, data = X$`i`)
Teşekkürler!