Aqui farei algumas anotações principalmente dicas que facilitam a vida durante minha pesquisa aqui no grupo de Sistemas Complexos do IF-UFF.
Aqui um modelo de poster para os nossos trabalhos que serão apresentados em Volta Redonda orahcio_lawnp09.tar.gz
Tenho vários arquivos de dados divididos entre 200 amostras de 6 parâmetros diferentes. Para tratar essa massa de dados apenas usei uma list para navegar entre os diferentes parâmetros que contém cada posição, uma data.frame para a tabele de amostras. A entrada de dados fica portanto?
x <- list() for(i in 1:6) { # laço para parâmetros x[i] <- data.frame(read.table(paste('./data/N1e3p',format(p[i],sci=FALSE),'.',1,'..dat',sep=""))) for(j in 2:200) { # laço para amostras, note que o data.frame foi iniciado e ele está nos dois lados da atribuição para que suas colunas possam ser adicionadas ao fim da tabela. # a função format deixa o número em decimal como no nome do arquivo e a função paste concatena meus objetos com um separador nulo (sep="") x[[i]] <- data.frame(x[[i]],read.table(paste('./data/N1e3p',format(p[i],sci=FALSE),'.',j,'..dat',sep=""))) } }
Agora a vida se torna mais fácil, por exemplo, vou querer o gráfico da evolução do valor médio das minhas amostras, então para o primeiro parâmetro por exemplo faço:
plot(1:1000,rowMeans(x[[1]][1:1000,]))
E o que mais a imaginação permitir.
Bem poderia estar usando o python para essa tarefa. Mas vamos ao que interessa.
Tenho várias amostras de uma dada simulação: a1, a2, a3… E quero ainda variar os tipos de amostras: b1, b2… c1, c2…
Então como poderia reunir todas elas numa estrutura única no R? Basta usarmos listas de listas, recurso muito fácil de usar em linguagens como perl e python. O R também aceita isso.
Voltemos ao meu conjunto, D será minha estrutura mestre, e supondo que minhas amostras são separadas por parâmetros a, b, c, etc. Logo vou supor que a's, b's e c's já estejam abertos em listas, logo:
D[[1]] <- list(a1) # sem índice para a primeira entrada D[[1]][2] <- list(a2) # a partir daqui usa-se o índice deste nível de dados D[[1]][3] <- list(a3) ... D[[2]] <- list(b1) D[[2]][2] <- list(b2) ...
Claro que um laço for pode ser usado para otimizar o procedimento de leitura e novamente a read.table dar lugar às lista a's, b's, etc.
No post anterior ensinei a armazenar um arquivo de dados dentro de um elemento do objeto list no R. Agora para ter acesso a tais elementos do tipo:
x <- list() x[1] <- read.table('arquivo1.txt') x[2] <- read.table('arquivo2.txt')
A sintaxe não foi nada intuitiva:
print x[[1]][1:10]
Exibirá na tela
> print x[[1]][1:10] [1] 0.490 0.552 0.425 0.530 0.455 0.577 0.433 0.536 0.507 0.429
as dez primeiras linhas do meu arquivo de dados. Neste exemplo usei arquivos de uma coluna apenas, mas a função read.table lê quantas colunas existirem. Mais tarde eu descrevo ela melhor. Então o meu exemplo de arquivo:
arquivo1.txt
O código abaixo serve para armazenar numa tabela do R uma sequência de arquivos: p050N1000.dat, p050N5000.dat, p050N10000.dat… Dessa maneira cada item da lista será por exemplo a série temporal armazenada nesses arquivos.
N <- c(1e3,5e3,1e4,5e4,1e5,5e5,1e6,5e6) x <- list() for(i in 1:8) { # a função format deixa o número em decimal como no nome do arquivo e a função paste concatena meus objetos com um separador nulo (sep="") x[i] <- read.table(paste('p050N',format(N[i],sci=FALSE),'.dat',sep="")) }
Como meu processamento é o mesmo para cada arquivo isso irá facilitar muito a vida daqui pra frente.