2010-09-24 26 views
9

En utilisant l'ensemble de données exemple builtin ToothGrowth de R, cela fonctionne:Comment utiliser les variables de chaîne pour créer une liste de variables pour ddply?

ddply(ToothGrowth, .(supp,dose), function(df) mean(df$len)) 

Mais je voudrais utiliser les facteurs de sous-ensembles, deux variables, quelque chose comme

factor1 = 'supp' 
factor2 = 'dose' 
ddply(ToothGrowth, .(factor1,factor2), function(df) mean(df$len)) 

qui ne fonctionne pas. Comment cela devrait-il être fait?

Je pensais que peut-être quelque chose comme ceci:

factorCombo = paste('.(',factor1,',',factor2,')', sep='') 
ddply(ToothGrowth, factorCombo, function(df) mean(df$len)) 

Mais il ne fonctionne pas non plus. Je pense que je suis proche, mais pas sûr de la bonne façon de le faire. Je suppose que la commande entière pourrait être mise dans une chaîne, suivie d'un appel eval() de la chaîne, mais j'espère qu'il y a une manière plus élégante?

Répondre

7

Essayez:

x <- c("supp", "dose") 
ddply(ToothGrowth, x, function(df) mean(df$len)) 
+0

merci! et pour utiliser exactement le format que je demandais, la première ligne serait: x <- c (facteur1, facteur2) –

+0

Pas de problème! Ddply est pieux, une fois que vous l'obtenez, vous pouvez faire à peu près tout ce que vous voulez. –

+0

Nice. Pouvez-vous faire le même tour avec des variables de modification? Supposons que vous avez 'x <- c (" supp ")' et que vous voulez la moyenne groupée de len et V1. –