2017-08-24 5 views
0

J'essaie de trouver les fonctions de densité de probabilité d'une donnée de vent. Voici comment je calcule le paramètre d'échelle à partir des vitesses moyennes du vent.L'utilisation des boucles pour enregistrer une matrice de données?

k<-2 
for(i in 1:length(Windmean)){ 
     Scale[i]=as.numeric(Windmean[i]/(exp(gammaln(1+(1/k))))) 
     } 

> Scale 
[1] 3.913934 3.996000 4.012884 3.925220 3.856707 3.849608 3.820578 3.943110 3.945975 3.842338 3.891791 
[12] 3.933083 3.993944 3.907775 3.847120 3.853263 3.917156 4.028956 3.878879 3.753880 3.969074 3.818923 
[23] 3.855913 3.993075 3.985828 3.914240 3.854336 3.620460 3.848180 3.843788 3.830617 3.841890 3.879547 
[34] 3.904059 

Si ce sont mes résultats pour paramètre d'échelle que je veux utiliser la formule ci-dessous pour obtenir la probabilité de vent Wind_prob. que je fais.

Scale<- cbind(3.913934,3.996000,4.012884,3.925220,3.856707,3.849608, 
3.820578,3.943110,3.945975,3.842338,3.891791,3.933083,3.993944,3.907775, 
3.847120,3.853263,3.917156,4.028956,3.878879,3.753880,3.969074,3.818923, 
3.855913,3.993075,3.985828,3.914240,3.854336,3.620460,3.848180,3.843788, 
3.830617,3.841890,3.879547,3.904059) ##Length 34 

bins<-cbind(seq(0.5,25,by=0.5)) ##Length 51 
         bins<-cbind(bins) 
     shape<-k 
       for(i in 1:length(bins)){ 
for(o in 1:length(Scale)){ 
       Wind_prob[i]<-(0.5*(exp(-1*(bins[i,1]/shape)^shape))*(shape/as.numeric(Scale[o]))*((bins[i,1]/as.numeric(Scale[o]))^(shape-1))) 
      } 
} 

Je reçois une liste de 51 fonctions de probabilité (i=34) mais je devrais obtenir une matrice de [51 * 34]. Fondamentalement, je veux obtenir 51 fonctions de probabilité pour chaque 34 fonctions d'échelle. Il semble que mes itérations n'aient pas été enregistrées à la matrice. J'ai essayé as.matrix, as.array aussi bien dans le wind_prob mais n'ai pas pu le faire fonctionner. Quelqu'un serait-il aimable de souligner les changements que j'ai besoin de faire dans le code? Merci.

+0

'K' est manquante. 'o: length (o)' est invalide. L'expression longue renvoie 1 nombre. Vous devez penser plus à ce sujet. Préallouer une matrice pour remplir et ensuite utiliser deux indices. En ce moment, vous n'utilisez pas la dimension "o". –

+0

@ RomanLuštrik 'k' est donné en 2, voir la première moitié du code. oui ça devrait être '1: length (Scale)' Edited. – SamAct

Répondre

1

Vous devez utiliser une matrice:

Scale <- c(3.913934,3.996000,4.012884,3.925220,3.856707,3.849608, 
      3.820578,3.943110,3.945975,3.842338,3.891791,3.933083,3.993944,3.907775, 
      3.847120,3.853263,3.917156,4.028956,3.878879,3.753880,3.969074,3.818923, 
      3.855913,3.993075,3.985828,3.914240,3.854336,3.620460,3.848180,3.843788, 
      3.830617,3.841890,3.879547,3.904059) ##Length 34 
bins <- seq(0.5, 25, by = 0.5) # length 50 
shape <- 2 
Wind_prob <- matrix(NA_real_, length(bins), length(Scale)) 
for (j in seq_along(Scale)) { 
    for (i in seq_along(bins)) { 
    Wind_prob[i, j]<-(0.5*(exp(-1*(bins[i]/shape)^shape))* 
         (shape/as.numeric(Scale[j]))* 
         ((bins[i]/as.numeric(Scale[j]))^(shape-1))) 
    } 
} 
+0

Pourriez-vous expliquer pourquoi je devrais prendre 'seq_along (Scale)' en premier et 'seq_along (bin)' second dans les boucles? Est-ce parce que, pour chaque échelle, nous calculons wind_prob dans chaque bac? – SamAct

+0

Yeap. Vous voulez itérer sur toutes les combinaisons de '' Scale'' et '' bins''. –