[R-br] Salvar saídas de um loop

Fernando Souza nandodesouza em gmail.com
Quinta Agosto 10 17:58:34 -03 2017


Os comando so Fernando Toledos estão corretos, porém necessitava de algumas
correções na função melt

Os pacotes necessários para o código são: {plyr} e {reshape}

setwd("~/Documentos/Biblioteca/EstudoR" )

#raiz =
'C:\\Users\\Yury\\Desktop\\Mestrado\\1_TESE\\Model_Data\\Maize\\PREVISAO\\PA\\'

raiz <- "~/Documentos/Biblioteca/EstudoR/E1"

##---------------------------------------------------------------
estrategia = c('E1', 'E2', 'E3', 'E4', 'E5')

meses = c('setembro', 'outubro', 'novembro', 'dezembro', 'janeiro',
'fevereiro', 'marco', 'abril')

names(meses) <- meses

cidade = c("abelardoluz", "altamira", "brasilia", "caarapo", "catalao",
"lagarto", "machado", "mateiros","muitoscapoes", "piracicaba",
"pontagrossa", "primaveradoleste", "srmangab", "sdesiderio", "urucui")

anos = c(1980:2012)

##-----------------------------------------------------------------------------------------------------

readFile <- function(mes) read.table(paste0(raiz,"/",mes,'/final.txt'),
header = TRUE, sep = '\t')
## pacote necessário para a função dplyr
##install.packages(plyr)
library(plyr)
data_raw <- ldply(meses, readFile, .id = 'mes')
str(data_raw)

library(reshape)
data_long <- melt(data_raw, id.vars = c('mes', 'cidades'), variable.name =
'ano', value.name = 'prod')


Em 10 de agosto de 2017 15:10, Yury Duarte via R-br <
r-br em listas.c3sl.ufpr.br> escreveu:

> Aos interessados, segue solução do problema utilizando a função for().
>
> Att
>
> rm(list = ls())
>
> raiz = 'C:\\Users\\Yury\\Desktop\\Mestrado\\1_TESE\\Model_Data\\
> Maize\\PREVISAO\\PA\\'
>
> estrategia = c('E1', 'E2', 'E3', 'E4', 'E5')
> meses = c('setembro', 'outubro', 'novembro', 'dezembro', 'janeiro',
> 'fevereiro', 'marco', 'abril')
> cidade = c("abelardoluz", "altamira", "brasilia", "caarapo", "catalao",
> "lagarto", "machado", "mateiros",
>            "muitoscapoes", "piracicaba", "pontagrossa",
> "primaveradoleste", "srmangab", "sdesiderio", "urucui")
> anos = c(1980:2012)
> previsao = matrix(NA, nrow = length(meses), ncol = length(1980:2012))
> colnames(previsao) = 1980:2012
>
> #for(e in 1:length(estrategias)){
> for(city in 1:length(cidade)){
>   for(m in 1:length(meses)){
>
>     a = read.table(paste0(raiz, 'E1\\', meses[m],'\\', 'final.txt'),
> header = T, sep = '\t')
>
>
>       for(i in 1:length(anos)){
>
>         previsao[m,i] = a[city,i]
>
>       }
>     }
>     write.table(previsao, paste0(raiz, 'E1\\', cidade[city],'.txt'),
> row.names = F, col.names = T, sep = '\t')
>   }
> #}
>
> Yury Duarte
> Engenheiro Agrônomo - ESALQ/USP
>
> Em 10 de agosto de 2017 14:34, Yury Duarte <yurynepomuceno em gmail.com>
> escreveu:
>
>> Fernando,
>>
>> testei seu código e não consigo fazer com que a função ldply funcione
>> (could not find function "ldply").
>> Pelo que busquei na literatura, não necessito de nenhum pacote adicional
>> para fazer essa função rodar. Também estou usando a versão mais atual do R,
>> então não acredito que possa ser um problema de versão.
>> Se tiver alguma ideia do porque isso possa estar ocorrendo, tenho
>> interesse em ouvir.
>>
>> Mais uma vez, agradeço a colaboração de todos!
>>
>> Att
>>
>> Yury Duarte
>> Engenheiro Agrônomo - ESALQ/USP
>>
>> Em 9 de agosto de 2017 18:38, FHRB Toledo <fernandohtoledo em gmail.com>
>> escreveu:
>>
>>> Yuri,
>>>
>>> Veja se isso resolve seu problema... :
>>>
>>> ## meses
>>> meses <- c('setembro', 'outubro', 'novembro', 'dezembro', 'janeiro',
>>> 'fevereiro', 'marco', 'abril')
>>> names(meses) <- meses # precisam ser nomeados
>>>
>>> ## funcao que le um certo aquivo
>>> readFile <- function(mes) read.table(paste0(mes, '/final.txt'), header =
>>> TRUE, sep = '\t')
>>>
>>> ## carrega todos arquivos em 1 so
>>> data_raw <- ldply(meses, readFile, .id = 'mes')
>>>
>>> ## formato longo
>>> data_long <- melt(data_raw, id.vars = .(mes, cidades), variable.name =
>>> 'ano', value.name = 'prod')
>>>
>>> ## altera niveis de ano
>>> levels(data_long$ano) <- 1980:2012
>>>
>>> ## uma pilha com as matrizes por cidade
>>> stack <- dlply(data_long, .(cidades), function(set) dcast(set, mes ~
>>> ano, value.var = 'prod'))
>>>
>>> Quanto a salvar cada cidade fica como desafio para você :)
>>>
>>> 2017-08-09 15:10 GMT-05:00 Yury Duarte via R-br <
>>> r-br em listas.c3sl.ufpr.br>:
>>>
>>>> Obrigado Fernando!
>>>>
>>>> Vou dar uma olhada nessas sugestões, obrigado!
>>>> Mas meu interesse é em executar a tarefa através do comando for()
>>>> apenas.
>>>> Gostaria de entender porque meu código não é reproduzível, já que
>>>> forneci ele na íntegra, juntamente com os arquivos necessários para
>>>> alimenta-lo.
>>>>
>>>> Att
>>>>
>>>> Yury Duarte
>>>> Engenheiro Agrônomo - ESALQ/USP
>>>>
>>>> Em 9 de agosto de 2017 16:57, Fernando Antonio de souza <
>>>> nandodesouza em gmail.com> escreveu:
>>>>
>>>>> Ah! Seu código não é reproduzível. Envie um código reproduzível para
>>>>> que possa receber ajuda.
>>>>>
>>>>> att
>>>>>
>>>>> =========================================
>>>>> Fernando Souza
>>>>> Celular: (31)99796-8781 (Vivo)
>>>>> E-mail:nandodesouza em gmail.com
>>>>> <https://n1.nylas.com/link/66b42e4442df0088d872a1d9c4d8cd0c6a355e9f14bbcd0269aedb5ea05af171/0?redirect=mailto%3Ae-mail%253Anandodesouza%40gmail.com&recipient=yurynepomuceno%40gmail.com>
>>>>> ==========================================
>>>>>
>>>>> On Ago 9 2017, at 4:48 pm, Yury Duarte via R-br <
>>>>> r-br em listas.c3sl.ufpr.br> wrote:
>>>>>
>>>>>> Boa tarde colegas listeiros!
>>>>>>
>>>>>> Estou tendo um pequeno problema para salvar as saídas de um loop que
>>>>>> fiz para preencher uma matriz com dados de diferentes arquivos. Meus
>>>>>> arquivos base possuem informações anuais de produtividade (colunas) de 15
>>>>>> locais (linhas) para um determinado mês. Construí o loop com intenção de
>>>>>> gerar um arquivo por local, contemplando as produtividades de cada mês (nas
>>>>>> linhas) e de cada ano (nas colunas). Conferi o output do único arquivo
>>>>>> salvo pelo script e os valores correspondem ao arranjo desejado, então
>>>>>> acredito que a lógica para o preenchimento da matriz esteja correta. Os
>>>>>> arquivos para executar a simulação estão em anexo e o script está no corpo
>>>>>> do email.
>>>>>>
>>>>>> Desde já, agradeço pela colaboração de todos!
>>>>>>
>>>>>> rm(list = ls())
>>>>>>
>>>>>> raiz = 'C:\\Users\\Yury\\Desktop\\Mestrado\\1_TESE\\Model_Data\\Mai
>>>>>> ze\\PREVISAO\\PA\\'
>>>>>>
>>>>>> estrategia = c('E1', 'E2', 'E3', 'E4', 'E5')
>>>>>> meses = c('setembro', 'outubro', 'novembro', 'dezembro', 'janeiro',
>>>>>> 'fevereiro', 'marco', 'abril')
>>>>>> cidade = c("abelardoluz", "altamira", "brasilia", "caarapo",
>>>>>> "catalao", "lagarto", "machado", "mateiros",
>>>>>>            "muitoscapoes", "piracicaba", "pontagrossa",
>>>>>> "primaveradoleste", "srmangab", "sdesiderio", "urucui")
>>>>>> anos = c(1980:2012)
>>>>>> previsao = matrix(NA, nrow = length(meses), ncol = length(1980:2012))
>>>>>> colnames(previsao) = 1980:2012
>>>>>>
>>>>>> #for(e in 1:length(estrategias)){
>>>>>>
>>>>>>   for(m in 1:length(meses)){
>>>>>>
>>>>>>     a = read.table(paste0(raiz, 'E1\\', meses[m],'\\', 'final.txt'),
>>>>>> header = T, sep = '\t')
>>>>>>     for(city in 1:length(cidade)){
>>>>>>
>>>>>>       for(i in 1:length(anos)){
>>>>>>
>>>>>>         previsao[m,i] = a[city,i]
>>>>>>       }
>>>>>>     }
>>>>>>     write.table(previsao, paste0(raiz, 'E1\\', cidade[city],'.txt'),
>>>>>> row.names = F, col.names = T, sep = '\t')
>>>>>>   }
>>>>>> #}
>>>>>>
>>>>>> Yury Duarte
>>>>>> Engenheiro Agrônomo - ESALQ/USP
>>>>>>
>>>>>> _______________________________________________
>>>>>> R-br mailing listR-br em listas.c3sl.ufpr.brhttps://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 em 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 em 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.
>



-- 
=========================================
Fernando Souza
Zootecnista, DSc. Produção e Alimentação Animal
Celular: (31)99796-8781 (Vivo)
E-mail:nandodesouza em gmail.com <e-mail%3Anandodesouza em gmail.com>
Lattes: http://lattes.cnpq.br/6519538815038307
Blog: https://producaoanimalcomr.wordpress.com/
==========================================
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20170810/838ef4a0/attachment.html>


Mais detalhes sobre a lista de discussão R-br