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: p> puis veut boucler sur les vecteurs ci-dessus p> je veux Chaque itération stocke les valeurs Mon résultat attendu doit être comme suit: p> juste pour l'enregistrement puis: p> KSS CODE> 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) Code> Combinaisons en un simple à comprendre Dataframe. p>
3 Réponses :
si créé le 2019-03-17 par le package Reprex a> (v0.2.1) sup> p> p> kss code> est juste la somme de
dette code>,
rho code> et
theta code>, il peut être fait assez facilement :
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) code>, où
f code> 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) code> crée toutes les combinaisons possibles. Donc, si vous avez une fonction
f code> pour résoudre l'équation donnée un vecteur (par exemple,
c (1.0, 0,00, 0,00) code>), 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é.
Une solution possible avec avec PMAP code> à partir de
Purrr code> et
muté code> de
dplyr code> est ce qui suit. Ici vous pouvez remplacer
my_function code> avec tout ce que vous essayez d'accomplir. Notez que
PMAP_DBL CODE> s'attend à renvoyer un double, mais vous pouvez également utiliser
PMAP code> qui renvoie ensuite une liste.
PMAP code> remplace les boucles que vous avez spécifiées. Il faut une fonction et l'applique à chaque ligne du document
my.df code> et utilise les arguments spécifiés dans la liste comme des arguments de la fonction. p>
arrangez code>, vous pouvez le commander de telle sorte que vous ayez la commande originale. p> p>
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 code> par
SOLS <-NLEQSLV (0.05, k_sslv (0.05, k_ss) code> et
KSS <-round (SOLS $ x, 5 ) code>? 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 code> pour chaque nouveau theta et RHO, vous devez donc mettre la définition de
k_ss code> é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.
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 >
Comment calculez-vous
kss code>? Est-ce juste une somme de chaque
dette + thetas + rhos code>?