-1
votes

Remplir un cadre de données après plusieurs boucles dans R

Je fais plusieurs boucles et je souhaite créer un fichier de données avec les différents résultats.

Un MWe est le suivant: xxx

puis veut boucler sur les vecteurs ci-dessus xxx

je veux Chaque itération stocke les valeurs KSS et crée un fichier de données qui doit résumer essentiellement tous les (c.-à-d. Longueur de la longueur (theta) * longueur (dette) = 12 dans cet exemple) Combinaisons en un simple à comprendre Dataframe.

Mon résultat attendu doit être comme suit: xxx

juste pour l'enregistrement Voici comment ma KSS est générée : < / p> xxx

puis: xxx


1 commentaires

Comment calculez-vous kss ? Est-ce juste une somme de chaque dette + thetas + rhos ?


3 Réponses :


1
votes

si kss est juste la somme de dette , rho et theta , il peut être fait assez facilement : xxx

créé le 2019-03-17 par le package Reprex (v0.2.1)


7 commentaires

Désolé, dans mon cas original, KSS n'est pas la somme des rangées. Je le mets ici comme une somme des rangées principalement pour la commodité. Dans mon vrai cas, KSS est une solution à une équation non linéaire.


Dans ce cas, vous pouvez utiliser kss $ df $ <-Apply (df, 1, f) , où f est votre fonction non linéaire prenant un vecteur de longueur 3 comme argument.


Il manque l'étape où F est résolue, je ne le vois pas. Les «thetas» sont des paramètres de la fonction, KSS est la racine de cette fonction pour une combinaison donnée de valeurs de paramètre. Par conséquent, la boucle - parce que je regarde des valeurs pour KSS pour une combinaison différente de ces paramètres.


L'étape df <- expand.grid (theta = thetas, rho = rhos, dette = dettes) crée toutes les combinaisons possibles. Donc, si vous avez une fonction f pour résoudre l'équation donnée un vecteur (par exemple, c (1.0, 0,00, 0,00) ), cela devrait fonctionner.


Néanmoins, KSS est la racine d'une fonction non linéaire (polynomianl) - donc j'utilise un solveur non linéaire qui appelle 'F'. Je pense que c'est ce qui manque.


Sans plus d'informations, il est impossible de deviner ce que vous essayez de faire. Je pense que vous devriez être capable de modifier votre propre problème d'ici.


Je pense que l'essence de ce que je veux réaliser est bien expliqué. Parce que mon problème n'est pas généré comme "KSS", mais sur la manière de stocker les résultats dans un fichier de données comme expliqué.



1
votes

Une solution possible avec PMAP à partir de Purrr et muté de dplyr est ce qui suit. Ici vous pouvez remplacer my_function avec tout ce que vous essayez d'accomplir. Notez que PMAP_DBL s'attend à renvoyer un double, mais vous pouvez également utiliser PMAP qui renvoie ensuite une liste. xxx

PMAP remplace les boucles que vous avez spécifiées. Il faut une fonction et l'applique à chaque ligne du document my.df et utilise les arguments spécifiés dans la liste comme des arguments de la fonction.

avec arrangez , vous pouvez le commander de telle sorte que vous ayez la commande originale.


7 commentaires

Devrais-je mettre ceci (la commande mutate) à l'intérieur des boucles principales?


Pour une raison quelconque ne fonctionne pas. J'ai mis à jour mon exemple, alors peut-être que des choses pourraient peut-être être améliorées si vous pouvez s'il vous plaît jeter un coup d'œil à nouveau.


Avez-vous remplacé la KSS <- THETA + RHO + dette par SOLS <-NLEQSLV (0.05, k_sslv (0.05, k_ss) et KSS <-round (SOLS $ x, 5 ) ? Votre exemple n'est pas reproductible. Nous manquons beaucoup de variables comme a, alpha, y. De plus, je pense que vous redéfinissez k_ss pour chaque nouveau theta et RHO, vous devez donc mettre la définition de k_ss également dans l'appel My_Function.


Je vais essayer à nouveau, les valeurs que je n'ai pas définies ne sont que des scalaires définis ailleurs dans mon code. Donc, n'est pas la question la plus importante.


C'est un problème lorsque nous voulons vous aider, mais devez-vous d'abord déterminer comment exécuter votre code, ou il n'est pas possible du tout.


Il a maintenant fonctionné après que vous ayez suggéré (c'est-à-dire mettre la fonction à l'intérieur de My_Function), mais l'ordre des valeurs KSS ne représente pas la vraie combinaison des valeurs que je bougeait.


J'ai mis à jour ma question, juste au cas où vous verrez quelque chose de plus utile.



0
votes

J'ai trouvé une autre solution très intuitive:

Tout d'abord comme suggéré par @kath Définissez une fonction générale qui prend en entrée les paramètres sur lesquels on veut boucler: P>

df<-do.call(rbind,output)

And here is the result: 

Theta  Rho Debt    K
1    1.0 0.00 0.00 1.00
2    1.0 0.00 0.05 1.05
3    1.0 0.99 0.00 1.99
4    1.0 0.99 0.05 2.04
5    1.0 2.00 0.00 3.00
6    1.0 2.00 0.05 3.05
7    1.5 0.00 0.00 1.50
8    1.5 0.00 0.05 1.55
9    1.5 0.99 0.00 2.49
10   1.5 0.99 0.05 2.54
11   1.5 2.00 0.00 3.50
12   1.5 2.00 0.05 3.55
> 


0 commentaires