Como posso usar o ddply com variáveis .variáveis?

Eu uso o ddply para resumir algunsdata.frame por várias categorias, como esta:

# with both group and size being factors / categorical
split.df <- ddply(mydata,.(group,size),summarize,
                  sumGroupSize = sum(someValue))

Isso funciona sem problemas, mas geralmente gosto de calcular proporções, o que implica que eu preciso dividir pelo total do grupo. Como posso calcular esse total dentro do mesmoddply ligar

Digamos que eu gostaria de ter o compartilhamento de observações no grupo A que estão na classe de tamanho 1. Obviamente, eu tenho que calcular a soma de todas as observações na classe de tamanho 1 primeiro. Claro que eu poderia fazer isso com duas chamadas ddply, mas usar todas as chamadas seria mais confortável. Tem algum jeito de fazer isso

EDIT: Eu não quis perguntar muito específico, mas sei que estava incomodando as pessoas aqui. Então aqui está o meu problema específico. Na verdade, tenho um exemplo que funciona, mas não o considero realmente bacana. Além disso, ele tem uma falha que eu preciso superar: não funciona corretamente com o appl

library(plyr)

# make the dataset more "realistic"
mydata <- warpbreaks
names(mydata) <- c("someValue","group","size")
mydata$category <- c(1,2,3)
mydata$categoryA <- c("A","A","X","X","Z","Z")
# add some NA
mydata$category[c(8,10,19)] <- NA
mydata$categoryA[c(14,1,20)] <- NA


# someValue is summarized !
# note we have a another, varying category hence we need the a parameter
calcShares <- function(a, data) {
# !is.na needs to be specific!
tempres1 <- eval(substitute(ddply(data[!is.na(a),],.(group,size,a),summarize,
                sumTest = sum(someValue,na.rm=T))),

                envir=data, enclos=parent.frame())
tempres2 <- eval(substitute(ddply(data[!is.na(a),],.(group,size),summarize,
                sumTestTotal = sum(someValue,na.rm=T))),
                envir=data, enclos=parent.frame())

res <- merge(tempres1,tempres2,by=c("group","size"))
res$share <- res$sumTest/res$sumTestTotal
 return(res)

}

test <- calcShares(category,mydata)
test2 <- calcShares(categoryA,mydata)   
head(test)
head(test2)

Como você pode ver, pretendo executar isso em diferentes variáveis categóricas. No exemplo, eu tenho apenas dois (categoria, categoria A), mas, na verdade, obtive mais; portanto, o uso de apply com minha função seria muito bom, mas, de alguma forma, não funciona corretament

applytest <- head(apply(mydata[grep("^cat",
             names(mydata),value=T)],2,calcShares,data=mydata))   

.. retorna uma mensagem de aviso e um nome estranho (novoX [, i]) para a categoria var.

Então, como posso fazer ISTO a) mais elegante eb) corrigir o problema de aplicação?

questionAnswers(2)

yourAnswerToTheQuestion