Loop para criar diferentes bancos de dados usando o mesmo script

Boa tarde a todos! Estou com dificuldade em gerar um loop e espero que alguém possa me ajudar aqui. Estou trabalhando com dados de sobrevivência de animais até 5 idades determinadas e o efeito individual de 19 características dentro de um servidor. A partir de um banco inicial, eu preciso rodar o mesmo script para combinar todas as idades com todas as características, gerando 95 bancos de dados diferentes. Até agora, eu consegui fazer 5 bancos relativos a cada idade através do commandArg: #Loop ---------------------------------------------------------------------------- ------ ## Level 1: DATE OF BIRTH ==> z sdrumthreshold = c("2019-01-01", "2018-01-01", "2017-01-01", "2016-01-01", "2015-01-01") ### Level 2: SURVIVAL AGE ==> t sdactthreshold = c(36, 48, 60, 72, 84) ## Connection with the code in Linux. args = commandArgs(trailingOnly = TRUE) index.sdrum = as.numeric(args[1]) index.sdact = as.numeric(args[2]) Quando eu chamo as variáveis dentro do loop no Linux, o script roda certinho. Segue como ilustração a forma como eu chamei o loop no Linux. #!/bin/bash sdrumth_leader=(1 2 3 4 5) sdactth_leader=(1 2 3 4 5) for z in "${sdrumth_leader[@]}" do for t in "${sdactth_leader[@]}" do if [[ "$z" != "$t" ]] then continue else sbatch Survival.Rcode.bash $z $t #calling indexes. sleep 1 fi done done Porém, tentei fazer a mesma coisa, criando um vetor com o nome das colunas e não tive sucesso: ### Level 3: TYPE TRAITS ==> q sdtypetrait = c("Stature", "Strength", "FinalScore", "DairyForm", "RumpAngle", "RumpWidth", "RearLegs", "ForeUdder", "RearUdderHeight", "RearUdderWidth", "FootAngle", "UdderDepth", "UdderCleft", "TeatPlacement", "TeatLength", "RearTeatPlacementRv", "RearTeatPlacementSv", Pasterns", "RearTeatLength") ## Connection with the code in Linux. args = commandArgs(trailingOnly = TRUE) index.sdrum = as.numeric(args[1]) index.sdact = as.numeric(args[2]) index.typet = as.numeric(args[3]) Quando eu chamo a variável dentro do script, ela vem com as aspas e dá erro. As entradas da variável do vetor são: type13 <- subset(type12, sdtypetrait [index.typet] <= 50) count(type13, sdtypetrait [index.typet]) model <- lm(formula = sdtypetrait [index.typet] ~ CalvingAge + I(CalvingAge^2) + appraisalDIM + I(appraisalDIM^2), data = type15) dados_completo$sdtypetrait [index.typet]_adj <- dados_completo$residuals dados_completo$sdtypetrait [index.typet]_adj2 <- (dados_completo$sdtypetrait [index.typet]_adj)*2 dados_usar <- select(dados_completo, RegId, SireRegId, DamRegId, CG, Cross, AFC, AFC2, Inbreeding, Inbreed2, sdtypetrait [index.typet]_adj, sdtypetrait [index.typet]_adj2, Survival) write.table(dados_usar, file = paste0("/teste/", sdactthreshold[index.sdact],"/", sdtypetrait [index.typet],"/Survival.dat"), sep = " ", row.names = F, quote = F, col.names = F) Será que alguém tem alguma ideia de como eu posso chamar a variável sem entrar as aspas, ou se a forma como estou rodando tem algum erro? Obrigada! ____________________________________ Barbara Mazetti Nascimento Postdoctoral Researcher Department of Animal and Dairy Sciences University of Wisconsin-Madison

Olá Bárbara, Via de regra, no R raramente se necessita usar *loops* pela natureza da linguagem voltada a vetores. Por outro lado, sua descrição, no texto, é contrária ao que vc parece desejar. Me explico: a descrição do texto dá a impressão que já se dispõe de um banco com todas as informações (dezenove características e cinco idades). Não se menciona o formato ou onde reside o banco, mas em geral essas operações são feitas usando-se uma *query* (que no seu caso pode ser feita pelo comando *subset* [como se vê no s/script). Olhando seu código a dúvida é a seguinte: type13 <- subset(type12, *sdtypetrait [index.typet]* <= 50) pela definição de sdtypetrait, mais acima, essa var é um vetor de cadeias de caracteres, o que vc espera ao fazer uma comparação com 50 ? HTH -- Cesar On Thu, Jun 2, 2022 at 2:00 PM Bárbara Mazetti Nascimento por (R-br) < r-br@listas.c3sl.ufpr.br> wrote:
Boa tarde a todos!
Estou com dificuldade em gerar um loop e espero que alguém possa me ajudar aqui.
Estou trabalhando com dados de sobrevivência de animais até 5 idades determinadas e o efeito individual de 19 características dentro de um servidor. A partir de um banco inicial, eu preciso rodar o mesmo script para combinar todas as idades com todas as características, gerando 95 bancos de dados diferentes.
Até agora, eu consegui fazer 5 bancos relativos a cada idade através do commandArg:
#Loop ----------------------------------------------------------------------------------
## Level 1: DATE OF BIRTH ==> z
sdrumthreshold = c("2019-01-01", "2018-01-01", "2017-01-01", "2016-01-01", "2015-01-01")
### Level 2: SURVIVAL AGE ==> t
sdactthreshold = c(36, 48, 60, 72, 84)
## Connection with the code in Linux.
args = commandArgs(trailingOnly = TRUE)
index.sdrum = as.numeric(args[1])
index.sdact = as.numeric(args[2])
Quando eu chamo as variáveis dentro do loop no Linux, o script roda certinho. Segue como ilustração a forma como eu chamei o loop no Linux.
#!/bin/bash
sdrumth_leader=(1 2 3 4 5)
sdactth_leader=(1 2 3 4 5)
for z in "${sdrumth_leader[@]}"
do
for t in "${sdactth_leader[@]}"
do
if [[ "$z" != "$t" ]]
then
continue
else
sbatch Survival.Rcode.bash $z $t #calling indexes.
sleep 1
fi
done
done
Porém, tentei fazer a mesma coisa, criando um vetor com o nome das colunas e não tive sucesso:
### Level 3: TYPE TRAITS ==> q
sdtypetrait = c("Stature", "Strength", "FinalScore", "DairyForm", "RumpAngle", "RumpWidth", "RearLegs", "ForeUdder", "RearUdderHeight", "RearUdderWidth", "FootAngle", "UdderDepth", "UdderCleft", "TeatPlacement", "TeatLength", "RearTeatPlacementRv", "RearTeatPlacementSv", “Pasterns", "RearTeatLength")
## Connection with the code in Linux.
args = commandArgs(trailingOnly = TRUE)
index.sdrum = as.numeric(args[1])
index.sdact = as.numeric(args[2])
index.typet = as.numeric(args[3])
Quando eu chamo a variável dentro do script, ela vem com as aspas e dá erro. As entradas da variável do vetor são:
type13 <- subset(type12, *sdtypetrait [index.typet]* <= 50)
count(type13*, sdtypetrait [index.typet]*)
model <- lm(formula = *sdtypetrait [index.typet]* ~ CalvingAge + I(CalvingAge^2) + appraisalDIM + I(appraisalDIM^2), data = type15)
dados_completo$*sdtypetrait [index.typet]*_adj <- dados_completo$residuals
dados_completo$*sdtypetrait [index.typet]*_adj2 <- (dados_completo$*sdtypetrait [index.typet]*_adj)*2
dados_usar <- select(dados_completo, RegId, SireRegId, DamRegId, CG, Cross, AFC, AFC2, Inbreeding, Inbreed2, *sdtypetrait [index.typet]*_adj, *sdtypetrait [index.typet]*_adj2, Survival)
write.table(dados_usar,
file = paste0("/teste/",
sdactthreshold[index.sdact],"/", *sdtypetrait [index.typet]* ,"/Survival.dat"),
sep = " ",
row.names = F,
quote = F,
col.names = F)
Será que alguém tem alguma ideia de como eu posso chamar a variável sem entrar as aspas, ou se a forma como estou rodando tem algum erro?
Obrigada!
*____________________________________*
*Barbara Mazetti Nascimento*
Postdoctoral Researcher
Department of Animal and Dairy Sciences
University of Wisconsin-Madison
_______________________________________________ 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.

Oi Cesar! Obrigada pela resposta! Acho que agora entendi porque não dá certo. Eu não consegui escrever no script o que eu quero e ele entende como um vetor de caracteres. Meu banco de dados é um arquivo csv com uma coluna com a identificação de animal e depois 19 colunas com notas para avaliação visual de 19 características. Sdtypetrait é um vetor com o nome da coluna dessas características que eu quero chamar no código. Então minha ideia era que o código type13 <- subset(type12, sdtypetrait [index.typet] <= 50) se transformasse em : type13 <- subset(type12, Stature <= 50) Então no meu exemplo Stature é uma das notas que eu estou avaliando e eu usei o subset para ficar somente com animais com nota menor ou igual a 50. Provavelmente o que está acontecendo é que meu código indica que Stature é um valor e não uma coluna, como eu gostaria. Como eu vou avaliar as características separadamente, eu preciso editar um banco individual para cada uma delas para não perder muitas informações sem necessidade. Aproveitando a resposta, será que isso seria possível, chamar as colunas a partir de um vetor? Minha ideia era otimizar a criação dos bancos ao invés de editar ele várias vezes. De qualquer forma, eu agradeço a ajuda! Pelo menos consegui enxergar onde está o problema =) From: R-br <r-br-bounces@listas.c3sl.ufpr.br> On Behalf Of Cesar Rabak por (R-br) Sent: quinta-feira, 2 de junho de 2022 18:54 To: a lista Brasileira oficial de discussão do programa R. <r-br@listas.c3sl.ufpr.br> Cc: Cesar Rabak <cesar.rabak@gmail.com> Subject: Re: [R-br] Loop para criar diferentes bancos de dados usando o mesmo script Olá Bárbara, Via de regra, no R raramente se necessita usar loops pela natureza da linguagem voltada a vetores. Por outro lado, sua descrição, no texto, é contrária ao que vc parece desejar. Me explico: a descrição do texto dá a impressão que já se dispõe de um banco com todas as informações (dezenove características e cinco idades). Não se menciona o formato ou onde reside o banco, mas em geral essas operações são feitas usando-se uma query (que no seu caso pode ser feita pelo comando subset [como se vê no s/script). Olhando seu código a dúvida é a seguinte: type13 <- subset(type12, sdtypetrait [index.typet] <= 50) pela definição de sdtypetrait, mais acima, essa var é um vetor de cadeias de caracteres, o que vc espera ao fazer uma comparação com 50 ? HTH -- Cesar On Thu, Jun 2, 2022 at 2:00 PM Bárbara Mazetti Nascimento por (R-br) <r-br@listas.c3sl.ufpr.br <mailto:r-br@listas.c3sl.ufpr.br> > wrote: Boa tarde a todos! Estou com dificuldade em gerar um loop e espero que alguém possa me ajudar aqui. Estou trabalhando com dados de sobrevivência de animais até 5 idades determinadas e o efeito individual de 19 características dentro de um servidor. A partir de um banco inicial, eu preciso rodar o mesmo script para combinar todas as idades com todas as características, gerando 95 bancos de dados diferentes. Até agora, eu consegui fazer 5 bancos relativos a cada idade através do commandArg: #Loop ---------------------------------------------------------------------------------- ## Level 1: DATE OF BIRTH ==> z sdrumthreshold = c("2019-01-01", "2018-01-01", "2017-01-01", "2016-01-01", "2015-01-01") ### Level 2: SURVIVAL AGE ==> t sdactthreshold = c(36, 48, 60, 72, 84) ## Connection with the code in Linux. args = commandArgs(trailingOnly = TRUE) index.sdrum = as.numeric(args[1]) index.sdact = as.numeric(args[2]) Quando eu chamo as variáveis dentro do loop no Linux, o script roda certinho. Segue como ilustração a forma como eu chamei o loop no Linux. #!/bin/bash sdrumth_leader=(1 2 3 4 5) sdactth_leader=(1 2 3 4 5) for z in "${sdrumth_leader[@]}" do for t in "${sdactth_leader[@]}" do if [[ "$z" != "$t" ]] then continue else sbatch Survival.Rcode.bash $z $t #calling indexes. sleep 1 fi done done Porém, tentei fazer a mesma coisa, criando um vetor com o nome das colunas e não tive sucesso: ### Level 3: TYPE TRAITS ==> q sdtypetrait = c("Stature", "Strength", "FinalScore", "DairyForm", "RumpAngle", "RumpWidth", "RearLegs", "ForeUdder", "RearUdderHeight", "RearUdderWidth", "FootAngle", "UdderDepth", "UdderCleft", "TeatPlacement", "TeatLength", "RearTeatPlacementRv", "RearTeatPlacementSv", “Pasterns", "RearTeatLength") ## Connection with the code in Linux. args = commandArgs(trailingOnly = TRUE) index.sdrum = as.numeric(args[1]) index.sdact = as.numeric(args[2]) index.typet = as.numeric(args[3]) Quando eu chamo a variável dentro do script, ela vem com as aspas e dá erro. As entradas da variável do vetor são: type13 <- subset(type12, sdtypetrait [index.typet] <= 50) count(type13, sdtypetrait [index.typet]) model <- lm(formula = sdtypetrait [index.typet] ~ CalvingAge + I(CalvingAge^2) + appraisalDIM + I(appraisalDIM^2), data = type15) dados_completo$sdtypetrait [index.typet]_adj <- dados_completo$residuals dados_completo$sdtypetrait [index.typet]_adj2 <- (dados_completo$sdtypetrait [index.typet]_adj)*2 dados_usar <- select(dados_completo, RegId, SireRegId, DamRegId, CG, Cross, AFC, AFC2, Inbreeding, Inbreed2, sdtypetrait [index.typet]_adj, sdtypetrait [index.typet]_adj2, Survival) write.table(dados_usar, file = paste0("/teste/", sdactthreshold[index.sdact],"/", sdtypetrait [index.typet],"/Survival.dat"), sep = " ", row.names = F, quote = F, col.names = F) Será que alguém tem alguma ideia de como eu posso chamar a variável sem entrar as aspas, ou se a forma como estou rodando tem algum erro? Obrigada! ____________________________________ Barbara Mazetti Nascimento Postdoctoral Researcher Department of Animal and Dairy Sciences University of Wisconsin-Madison _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <mailto: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.

OK Bárbara, De novo, por falta do CMR, a gente tateia o entendimento, *mas* quer me parecer que o que desejas pode ser obtido com uma chamada assim:
type13 <- with(dados_completo, subset(type12, Stature <= 50))
*Embora* eu 'não entenda' o item type12, e imagino que a coluna a ser usada aí deveria ser a de idades, talvez‽ HTH On Fri, Jun 3, 2022 at 11:55 AM Bárbara Mazetti Nascimento por (R-br) < r-br@listas.c3sl.ufpr.br> wrote:
Oi Cesar!
Obrigada pela resposta!
Acho que agora entendi porque não dá certo. Eu não consegui escrever no script o que eu quero e ele entende como um vetor de caracteres.
Meu banco de dados é um arquivo csv com uma coluna com a identificação de animal e depois 19 colunas com notas para avaliação visual de 19 características.
Sdtypetrait é um vetor com o nome da coluna dessas características que eu quero chamar no código. Então minha ideia era que o código type13 <- subset(type12, *sdtypetrait [index.typet]* <= 50)
se transformasse em : type13 <- subset(type12, *Stature* <= 50)
Então no meu exemplo Stature é uma das notas que eu estou avaliando e eu usei o subset para ficar somente com animais com nota menor ou igual a 50. Provavelmente o que está acontecendo é que meu código indica que Stature é um valor e não uma coluna, como eu gostaria.
Como eu vou avaliar as características separadamente, eu preciso editar um banco individual para cada uma delas para não perder muitas informações sem necessidade.
Aproveitando a resposta, será que isso seria possível, chamar as colunas a partir de um vetor? Minha ideia era otimizar a criação dos bancos ao invés de editar ele várias vezes.
De qualquer forma, eu agradeço a ajuda! Pelo menos consegui enxergar onde está o problema =)
*From:* R-br <r-br-bounces@listas.c3sl.ufpr.br> *On Behalf Of *Cesar Rabak por (R-br) *Sent:* quinta-feira, 2 de junho de 2022 18:54 *To:* a lista Brasileira oficial de discussão do programa R. < r-br@listas.c3sl.ufpr.br> *Cc:* Cesar Rabak <cesar.rabak@gmail.com> *Subject:* Re: [R-br] Loop para criar diferentes bancos de dados usando o mesmo script
Olá Bárbara,
Via de regra, no R raramente se necessita usar *loops* pela natureza da linguagem voltada a vetores.
Por outro lado, sua descrição, no texto, é contrária ao que vc parece desejar.
Me explico: a descrição do texto dá a impressão que já se dispõe de um banco com todas as informações (dezenove características e cinco idades). Não se menciona o formato ou onde reside o banco, mas em geral essas operações são feitas usando-se uma *query* (que no seu caso pode ser feita pelo comando *subset* [como se vê no s/script).
Olhando seu código a dúvida é a seguinte:
type13 <- subset(type12, *sdtypetrait [index.typet]* <= 50)
pela definição de sdtypetrait, mais acima, essa var é um vetor de cadeias de caracteres, o que vc espera ao fazer uma comparação com 50 ?
HTH
--
Cesar
On Thu, Jun 2, 2022 at 2:00 PM Bárbara Mazetti Nascimento por (R-br) < r-br@listas.c3sl.ufpr.br> wrote:
Boa tarde a todos!
Estou com dificuldade em gerar um loop e espero que alguém possa me ajudar aqui.
Estou trabalhando com dados de sobrevivência de animais até 5 idades determinadas e o efeito individual de 19 características dentro de um servidor. A partir de um banco inicial, eu preciso rodar o mesmo script para combinar todas as idades com todas as características, gerando 95 bancos de dados diferentes.
Até agora, eu consegui fazer 5 bancos relativos a cada idade através do commandArg:
#Loop ----------------------------------------------------------------------------------
## Level 1: DATE OF BIRTH ==> z
sdrumthreshold = c("2019-01-01", "2018-01-01", "2017-01-01", "2016-01-01", "2015-01-01")
### Level 2: SURVIVAL AGE ==> t
sdactthreshold = c(36, 48, 60, 72, 84)
## Connection with the code in Linux.
args = commandArgs(trailingOnly = TRUE)
index.sdrum = as.numeric(args[1])
index.sdact = as.numeric(args[2])
Quando eu chamo as variáveis dentro do loop no Linux, o script roda certinho. Segue como ilustração a forma como eu chamei o loop no Linux.
#!/bin/bash
sdrumth_leader=(1 2 3 4 5)
sdactth_leader=(1 2 3 4 5)
for z in "${sdrumth_leader[@]}"
do
for t in "${sdactth_leader[@]}"
do
if [[ "$z" != "$t" ]]
then
continue
else
sbatch Survival.Rcode.bash $z $t #calling indexes.
sleep 1
fi
done
done
Porém, tentei fazer a mesma coisa, criando um vetor com o nome das colunas e não tive sucesso:
### Level 3: TYPE TRAITS ==> q
sdtypetrait = c("Stature", "Strength", "FinalScore", "DairyForm", "RumpAngle", "RumpWidth", "RearLegs", "ForeUdder", "RearUdderHeight", "RearUdderWidth", "FootAngle", "UdderDepth", "UdderCleft", "TeatPlacement", "TeatLength", "RearTeatPlacementRv", "RearTeatPlacementSv", “Pasterns", "RearTeatLength")
## Connection with the code in Linux.
args = commandArgs(trailingOnly = TRUE)
index.sdrum = as.numeric(args[1])
index.sdact = as.numeric(args[2])
index.typet = as.numeric(args[3])
Quando eu chamo a variável dentro do script, ela vem com as aspas e dá erro. As entradas da variável do vetor são:
type13 <- subset(type12, *sdtypetrait [index.typet]* <= 50)
count(type13*, sdtypetrait [index.typet]*)
model <- lm(formula = *sdtypetrait [index.typet]* ~ CalvingAge + I(CalvingAge^2) + appraisalDIM + I(appraisalDIM^2), data = type15)
dados_completo$*sdtypetrait [index.typet]*_adj <- dados_completo$residuals
dados_completo$*sdtypetrait [index.typet]*_adj2 <- (dados_completo$*sdtypetrait [index.typet]*_adj)*2
dados_usar <- select(dados_completo, RegId, SireRegId, DamRegId, CG, Cross, AFC, AFC2, Inbreeding, Inbreed2, *sdtypetrait [index.typet]*_adj, *sdtypetrait [index.typet]*_adj2, Survival)
write.table(dados_usar,
file = paste0("/teste/",
sdactthreshold[index.sdact],"/", *sdtypetrait [index.typet]* ,"/Survival.dat"),
sep = " ",
row.names = F,
quote = F,
col.names = F)
Será que alguém tem alguma ideia de como eu posso chamar a variável sem entrar as aspas, ou se a forma como estou rodando tem algum erro?
Obrigada!
*____________________________________*
*Barbara Mazetti Nascimento*
Postdoctoral Researcher
Department of Animal and Dairy Sciences
University of Wisconsin-Madison
_______________________________________________ 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)
-
barbaramnascimento@gmail.com
-
Cesar Rabak