duvida integers e as.double

Olá Benilton. Por favor, gostaria de tirar uma dúvida a respeito de um código que você me passou há uns dias. É esse código abaixo. grupos <- unique(gsub("(.*)\\.\\d{1}$", "\\1", names(Pop))) tabelaPorGrupo <- function(grp, dat){ cols <- grep(grp, names(dat)) Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]]))) table(factor(Pop[,cols[1]], levels=Nomes), factor(Pop[,cols[2]], levels=Nomes)) } tabelas <- lapply(grupos, tabelaPorGrupo, Pop) names(tabelas) <- grupos tabelas post: http://r-br.2285057.n4.nabble.com/R-br-problema-com-for-loop-td4465197.html Tenho que fazer muitos cálculos com os valores gerados por esse código e, algumas vezes, quando estou trabalhando com valores altos, há warning messages dizendo "NAs produced by integer overflow". Um outro programador me disse que eu poderia resolver isso estocando meus valores como doubles e não como integers, e que eu teria que fazer alguma modificação nesse código para esse fim. Você concorda e poderia me ajudar com isso? obrigado, Vitor Aguiar

Se o q vc quer dizer e' q o problema acontece ao operar com os valores armazenados em 'tabelas', entao, sim, a solucao e' converter seus valores para doubles. Por exemplo, compare: as.integer(2^30)*as.integer(2^30) com as.double(2^30)*as.double(2^30) Sem entrar nos detalhes de classe de objectos, vc deve conseguir algum sucesso ao usar tabelasDouble abaixo: tabelasDouble = lapply(tabelas, function(tab) array(as.double(tab), dim=dim(tab))) b

Benilton, o problema é que assim eu perco a estrutura de matrix dos dados. Eu realmente precisava deles num formato de matrix, com índices e a posição de cada valor. Há como eu manter essa estrutura e ter os números armazenados como doubles? Obrigado, Vitor On Mar 29, 2012, at 5:17 PM, Benilton Carvalho wrote:
Se o q vc quer dizer e' q o problema acontece ao operar com os valores armazenados em 'tabelas', entao, sim, a solucao e' converter seus valores para doubles.
Por exemplo, compare:
as.integer(2^30)*as.integer(2^30)
com
as.double(2^30)*as.double(2^30)
Sem entrar nos detalhes de classe de objectos, vc deve conseguir algum sucesso ao usar tabelasDouble abaixo:
tabelasDouble = lapply(tabelas, function(tab) array(as.double(tab), dim=dim(tab)))
b _______________________________________________ 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.

no exemplo q eu enviei, a estrutura dos dados e' mantida.... se nao for, por favor, poste um exemplo que eu possa reproduzir. b

Você está correto. Eu apenas estou perdendo o nome dos meus índices, aqueles que estão dentro da função tabelaPorGrupo:
Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]])))
Isso está sendo aplicado ao objeto "tabelas". Mas quando se corre a linha:
tabelasDouble = lapply(tabelas, function(tab) array(as.double(tab), dim=dim(tab)))
eu perco essa informação. O índices passam então a ser chamados de [,1] [,2] [,3]... e assim por diante. Desculpe novamente a ignorância em R, mas tem como eu reaplicar o nome dos índices? Obrigado, Vitor On Mar 30, 2012, at 10:15 AM, Benilton Carvalho wrote:
no exemplo q eu enviei, a estrutura dos dados e' mantida.... se nao for, por favor, poste um exemplo que eu possa reproduzir. b _______________________________________________ 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.

A dica e' vc observar q quem ta' fazendo a magica e' o comando array()... Dai', se vc ler o manual desse comando (digitando ?array ), vc vera' que ha' 3 argumentos: a) data (q vc ja esta' usando); b) dim (q vc tbm esta' usando); c) dimnames (que nao esta' sendo usado)... Dai', mudando o comando para: tabelasDouble = lapply(tabelas, function(tab) array(as.double(tab), dim=dim(tab), dimnames=dimnames(tab))) faz o q vc quer. benilton 2012/3/30 Vitor Aguiar <vitor.aguiar@me.com>
Você está correto. Eu apenas estou perdendo o nome dos meus índices, aqueles que estão dentro da função tabelaPorGrupo:
Nomes <- levels(factor(c(dat[,cols[1]], dat[,cols[2]])))
Isso está sendo aplicado ao objeto "tabelas". Mas quando se corre a linha:
tabelasDouble = lapply(tabelas, function(tab) array(as.double(tab), dim=dim(tab)))
eu perco essa informação. O índices passam então a ser chamados de [,1] [,2] [,3]... e assim por diante.
Desculpe novamente a ignorância em R, mas tem como eu reaplicar o nome dos índices?
Obrigado, Vitor
On Mar 30, 2012, at 10:15 AM, Benilton Carvalho wrote:
no exemplo q eu enviei, a estrutura dos dados e' mantida.... se nao for, por favor, poste um exemplo que eu possa reproduzir. b _______________________________________________ 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.
participantes (2)
-
Benilton Carvalho
-
Vitor Aguiar