[R-br] Loop para criar diferentes bancos de dados usando o mesmo script

barbaramnascimento em gmail.com barbaramnascimento em gmail.com
Sex Jun 3 11:55:45 -03 2022


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 em 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 em listas.c3sl.ufpr.br>
Cc: Cesar Rabak <cesar.rabak em 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 em listas.c3sl.ufpr.br <mailto:r-br em 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 em listas.c3sl.ufpr.br <mailto: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.

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20220603/bab5d8a6/attachment.htm>


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