
Caros R-users Dada uma matrix qualquer: seq = c("a","a","a","a","a","a","b","b","b","b","b","c","c","c","c","c","c","c","c","c","c","c","c","c”) var1 = c(1,2,3,4,5,6,0,1,2,3,4,0,1,2,3,4,5,6,7,8,9,10,11,12) matrix.x = data.frame(seq,var1) funcao.x = function(x,d=1,T=3) { i = exp ( ( -x ) / ( d * T ) ) net = sum (i) resultado = 100 * ( i / net ) return (resultado) } Preciso aplicar a função dentro de cada subgrupo (seq) da matrix.x e criar ou um novo data.frame ou uma nova linha da matrix.x. Tentei utilizar o comando ddply do pacote, com o comando abaixo, não sei se essa seria a melhor forma, mas mesmo assim não estou conseguindo: library(“plyr”) R2 <- ddply(matrix.x, 'seq', transform, var=funcao.x(matrix.x$var1)) Error in data.frame(list(seq = c(2L, 2L, 2L, 2L, 2L), var1 = c(0, 1, 2, : arguments imply differing number of rows: 5, 24 Na verdade essa formula deveria dar um valor para cada linha… não sei se escolhi a função correta para o que necessito, alguém poderia me mostrar um caminho a seguir? No mais agradeço, Thales Siqueira

Apenas tire a parte 'matrix.x$' e deve funcionar: R2 <- ddply(matrix.x, 'seq', transform, var=funcao.x(var1)) ________________________________ De: Tropidurus Torquatus <t.torquatus@gmail.com> Para: r-br@listas.c3sl.ufpr.br Enviadas: Terça-feira, 25 de Fevereiro de 2014 12:41 Assunto: [R-br] Família ply Caros R-users Dada uma matrix qualquer: seq = c("a","a","a","a","a","a","b","b","b","b","b","c","c","c","c","c","c","c","c","c","c","c","c","c”) var1 = c(1,2,3,4,5,6,0,1,2,3,4,0,1,2,3,4,5,6,7,8,9,10,11,12) matrix.x = data.frame(seq,var1) funcao.x = function(x,d=1,T=3) { i = exp ( ( -x ) / ( d * T ) ) net = sum (i) resultado = 100 * ( i / net ) return (resultado) } Preciso aplicar a função dentro de cada subgrupo (seq) da matrix.x e criar ou um novo data.frame ou uma nova linha da matrix.x. Tentei utilizar o comando ddply do pacote, com o comando abaixo, não sei se essa seria a melhor forma, mas mesmo assim não estou conseguindo: library(“plyr”) R2 <- ddply(matrix.x, 'seq', transform, var=funcao.x(matrix.x$var1)) Error in data.frame(list(seq = c(2L, 2L, 2L, 2L, 2L), var1 = c(0, 1, 2, : arguments imply differing number of rows: 5, 24 Na verdade essa formula deveria dar um valor para cada linha… não sei se escolhi a função correta para o que necessito, alguém poderia me mostrar um caminho a seguir? No mais agradeço, Thales Siqueira _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Rubem, Acho que fui infeliz ao exemplificar o meu problema, na verdade nos meus dados reais estou obtendo os seguinte erro: Error in attributes(out) <- attributes(col) : 'names' attribute [2510] must be the same length as the vector [5] Já verifiquei na internet todas as tentativas: http://stackoverflow.com/questions/18854934/ddply-error-error-in-attributeso... http://stackoverflow.com/questions/14153092/meaning-of-ddply-error-names-att... http://searchinsleep.blogspot.de/2013/05/plyr-18-problem-updated.html Nenhuma deu certo… e pelo que vi… no terceiro link é parece ter observado um problema do pacote plyr 1.8… Alguém sugere outra alternativa? Em 25/02/2014, à(s) 17:49, Rubem Kaipper Ceratti <rubem_ceratti@yahoo.com.br> escreveu:
Apenas tire a parte 'matrix.x$' e deve funcionar:
R2 <- ddply(matrix.x, 'seq', transform, var=funcao.x(var1))
De: Tropidurus Torquatus <t.torquatus@gmail.com> Para: r-br@listas.c3sl.ufpr.br Enviadas: Terça-feira, 25 de Fevereiro de 2014 12:41 Assunto: [R-br] Família ply
Caros R-users
Dada uma matrix qualquer:
seq = c("a","a","a","a","a","a","b","b","b","b","b","c","c","c","c","c","c","c","c","c","c","c","c","c”) var1 = c(1,2,3,4,5,6,0,1,2,3,4,0,1,2,3,4,5,6,7,8,9,10,11,12) matrix.x = data.frame(seq,var1)
funcao.x = function(x,d=1,T=3) { i = exp ( ( -x ) / ( d * T ) ) net = sum (i) resultado = 100 * ( i / net ) return (resultado) }
Preciso aplicar a função dentro de cada subgrupo (seq) da matrix.x e criar ou um novo data.frame ou uma nova linha da matrix.x. Tentei utilizar o comando ddply do pacote, com o comando abaixo, não sei se essa seria a melhor forma, mas mesmo assim não estou conseguindo: library(“plyr”)
R2 <- ddply(matrix.x, 'seq', transform, var=funcao.x(var1)) Error in data.frame(list(seq = c(2L, 2L, 2L, 2L, 2L), var1 = c(0, 1, 2, : arguments imply differing number of rows: 5, 24
Na verdade essa formula deveria dar um valor para cada linha… não sei se escolhi a função correta para o que necessito, alguém poderia me mostrar um caminho a seguir?
No mais agradeço,
Thales Siqueira
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Thales, bom dia! A explicação está um pouco confusa, mas deduzo que você queira aplicar a função e relativizá-la pelo somatório do grupo dado por 'seq'. Na sua funcao.x vejo alguns problemas, como uso da notação reservada 'T' para uma variável e o fato da somatória ser a própria variável calculada. Tentei uma solução mais simplista, baseado no que deduzi. Espero que o trecho de código que segue possa ajudar. ### <code r> seq <- rep(c("a","b","c"), c(6,5,13)) var1 <- c(1,2,3,4,5,6,0,1,2,3,4,0,1,2,3,4,5,6,7,8,9,10,11,12) d <- 1 TT <- 3 # Não use 'T' como nome de var, pois é reservado pra TRUE! ind <- exp ( ( -var1 ) / ( d * TT ) ); ind net <- sapply(seq(var1), function(x) sum(ind[which(seq==seq[x])])); net ### soma condicionada res <- 100*(ind/net); res df.x <- data.frame(seq, var1, ind, net, res); df.x ### data.frame != matrix ### </code> Se a ideia for realmente essa, dá pra melhorar o código e mesmo partir pra soluções com a família plyr. Éder Comunello <c <comunello.eder@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]
participantes (3)
-
Rubem Kaipper Ceratti
-
Tropidurus Torquatus
-
Éder Comunello