J'aimerais utiliser R pour le traçage des résultats d'évaluation des performances des systèmes DB distincts. Pour chaque système, j'ai chargé les mêmes données et exécutez les mêmes requêtes dans plusieurs itérations.
Les données pour un seul système ressemble à ceci: p> Qu'est-ce dont j'ai besoin maintenant ( pour la traçage) est une matrice ou un cadre de données contenant la moyenne de ces mesures. P> pour le moment je fais cela: p> je pourrais mettre tout Ceci dans une fonction et calculer la matrice moyenne dans A pour la boucle, mais j'ai le sentiment vague qu'il doit y avoir une solution plus élégante. Toutes idées? P> Que puis-je faire pour les cas lorsque j'ai des résultats incomplets, par exemple, quand une itération a moins de lignes que les autres? P> Merci! P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P >
5 Réponses :
essayer, par exemple,
Avez-vous eu quelque chose comme ça à l'esprit?
do.call("rbind", lapply(results, mean))
Si je vous comprends correctement, sur un système de DB donné, dans chaque "itération" (1 ... n), vous chargez une séquence de jeux de données (1,2,3) et utilisez-les sur eux. Cela semble à la fin, vous souhaitez calculer le temps moyen sur toutes les itérations, Vous pouvez maintenant utiliser la fonction Dataset code> dans votre table All_Results code> qui identifie l'ensemble de données. Nous pouvons ajouter cette colonne comme suit: ddply code> à partir du package code> Plyr code> pour extraire facilement les moyennes de Les temps de chargement et de requête pour chaque ensemble de données. P> > ddply(all_results, .(DataSet), colwise(mean, .(loadTime, query1, query2)))
DataSet loadTime query1 query2
1 1 158.1000 0.4333333 5.7
2 2 236.8000 0.4000000 3.4
3 3 155.2667 0.3333333 5.9
C'est vraiment plus élégant que pour les boucles ... Merci pour l'indice.
Et si je veux inclure la colonne "Lines" dans le cadre de sortie de DDPLY? Je pourrais le faire en calculant simplement la moyenne aussi sur les lignes; Mais cela n'a pas de sens, car les numéros de ligne sont des valeurs statiques;
Je vois ce que tu veux dire, mais je suppose qu'il n'y a pas de mal à prendre le "méchant" d'un tas de valeurs identiques!
Essayez ceci:
> it <- all_results$iteration > aggregate(all_results, list(data.set = seq_along(it) - match(it, it) + 1), mean) data.set iteration lines loadTime query1 query2 query3 1 1 2 1e+05 158.1000 0.4333333 5.7 3.033333 2 2 2 1e+05 236.8000 0.4000000 3.4 2.633333 3 3 2 5e+04 155.2667 0.3333333 5.9 1.300000
Je pensais à suggérer la même chose, mais + code> ne fonctionne pas si chaque data.frame code> n'est pas la même taille.
Les cadres de données ont la même taille depuis que l'affiche indique que le code qu'il affichait fonctionne, mais il ne veut que quelque chose de plus "élégant".
@Gabor je faisais référence à la dernière phrase de sa question.
D'ACCORD. J'ai ajouté une deuxième solution. On pourrait définir une fonction plus mais dans ce cas, je pense que c'est plus facile d'utiliser l'agrégat.
Je ne vois pas pourquoi vous devez diviser all_results code> par itération code>. Vous pouvez simplement utiliser agrégat code> sur all_results code>. Il n'est pas nécessaire que toutes les itérations ont le même nombre d'observations. Lines <- "iteration, lines, loadTime, query1, query2, query3
1, 100000, 120.4, 0.5, 6.4, 1.2
1, 100000, 110.1, 0.1, 5.2, 2.1
1, 50000, 130.3, 0.2, 4.3, 2.2
2, 100000, 120.4, 0.1, 2.4, 1.2
2, 100000, 300.2, 0.2, 4.5, 1.4
2, 50000, 235.3, 0.4, 4.2, 0.5
3, 100000, 233.5, 0.7, 8.3, 6.7
3, 100000, 300.1, 0.9, 0.5, 4.4
3, 50000, 100.2, 0.4, 9.2, 1.2"
all_results <- read.csv(textConnection(Lines))
aggregate(all_results[,-1], by=all_results[,"iteration",drop=FALSE], mean)
Je pense que l'OP doit en moyenne par Dataset comme je l'ai dit dans ma réponse, non pas par "itération" (il n'a pas de sens de prendre la moyenne d'un jeu de données contenant 100 000 lignes et une avec 50000 lignes). Au moins c'est mon interprétation de ce qu'il veut vraiment faire.
... mais l'idée d'utiliser agrégat code> est bien cependant (+1). J'essayais simplement de l'utiliser comme un exercice pour pratiquer avec Plyr code>.