[R-br] Dúvida em looping e data.frame

Paulo Henrique Pimenta paulopimenta6 em hotmail.com
Quarta Janeiro 27 23:29:17 BRST 2016


Usei a função 
simulacao <- function(proporcao, moedas){    for (n in c(10, 20, 30))         for (p in c(0.3, 0.4, 0.5))             a <- print(moedas(n,p))        return(a)  }
b <- simulacao(proporcao, moedas)
No final ele possui somente um vetor com os dados gerados com n = 30 e p = 0.5 e não todos os gerados pelas combinações. Como eu poderia ter uma vetor ou alguma outra forma de armazenar estes dados? 
Paulo Henrique de A. S. Pimenta.
Graduando em Meteorologia (Bacharelado) - IAG/USP.
Fone: +5511981318435.
> 
> Message: 11
> Date: Wed, 27 Jan 2016 09:33:10 +0300
> From: Paulo Henrique Pimenta <paulopimenta6 em hotmail.com>
> To: "r-br em listas.c3sl.ufpr.br" <r-br em listas.c3sl.ufpr.br>
> Subject: [R-br] Dúvida em looping e data.frame
> Message-ID: <BAY182-W241C2B8A79DFC8287003AFF4D90 em phx.gbl>
> Content-Type: text/plain; charset="iso-8859-1"
> 
> Olá a todos
> Estou escrevendo um código que calcula o lance de uma moeda jogada e a probabilidade dela acontecer em respostas de 1 para cara e 0 para coroa, num bloco do meu código fiquei com uma dúvida relacionada a vetorização. Abaixo passarei todo o código e irei destacar o que me traz a dúvida:
> 
> ####Laboratorio 1 de R
> ###cara eh 1###coroa eh 0vetor_moedas <- NULLvetor <- NULLa <- NULL
> moeda <- function(p){
> if(runif(1) < p){
>                  y <- 1  
>                  }else{
>                        y <- 0                         }                                return(y)                                  }                ####separando uma funcao da outra####
> moedas <- function(numeros,probabilidade){
>                                                for (i in 1:numeros){
>                                                vetor[i] <- moeda(probabilidade)
>                                                                         }
>                                                return(vetor)
>                                                } 
> 
> ####separando uma funcao da outra####
> proporcao <- function(moedas){
>                            numeros_1 <- sum(vetor_moedas)
>                            numeros_totais <- length(vetor_moedas) 
>                            proporcao_final <- numeros_1/numeros_totais
>                            return(proporcao_final)
>                           }
> ####separando uma funcao da outra####
> simulacao <- function(proporcao, moedas){
> ###variando o "n" e o "p"
> for (i in 1:500){
> \\Aqui começa a minha, pois como fazer com que o vetor a1 aloque como data.frame todos os dados feitos pela função moedas, como fazer com que a2 também aloque um outro data.frame que aloque informações da função moedas e assim por diante... 
>   n <- c(10, 20, 30, 40, 50)  p <- c(0.2, 0.3, 0.4, 0.5)      a[i] <- data.frame(moedas(n[i],p[i])) 
> \\ As vezes ele só aloca o que é produzido em moedas(n[1],p[1]) em a1 e recicla o restante. Se alguém quiser testar fiquem a vontade para ajudar!
>                }
> 
> return(a)
>                                        }
> ###############################################################Probabilidade de ser cara ou 1 eh 0.5 - funcao moeda###lancamento de 10 moedas - funcao moedas
> ###comeco das chamas
> #########################################prob <- 0.4
> moeda(prob)
> #########################################n_1 <- 100
> moedas(n_1, prob)
> #########################################
> vetor_moedas <- moedas(n_1, prob)
> #########################################
> proporcao(vetor_moedas)
> #########################################
> simulacao(proporcao,moedas)
> #################################### 
> Um grande abraço a todos!!
> 
> Paulo Henrique de A. S. Pimenta.
> Graduando em Meteorologia (Bacharelado) - IAG/USP.
> Fone: +5511981318435. 		 	   		  
> -------------- Próxima Parte ----------
> Um anexo em HTML foi limpo...
> URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160127/683e3d06/attachment-0001.html>
> 
> ------------------------------
> 
> Message: 12
> Date: Wed, 27 Jan 2016 10:57:57 -0300
> From: Éder Comunello <comunello.eder em gmail.com>
> To: "r-br em listas.c3sl.ufpr.br" <r-br em listas.c3sl.ufpr.br>
> Subject: Re: [R-br] Dúvida em looping e data.frame
> Message-ID:
> 	<CABmC8gmxHtjGenrn6us=VnsgRE2E1B_zCY_nBZ+Vnyp1CZX5nw em mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
> 
> Paulo, bom dia!
> 
> A instrução for (i in 1:500) não parece coerente, pois me parece que você
> deveria variar em função da iteração n x p. Ao variar n você irá criar
> vetores de tamanhos diferentes, impossibilitando o armazenamento direto em
> um data.frame(). Poderia utilizar uma lista.
> 
> Você pode tentar algo como:
> simulacao <- function(proporcao, moedas){for (n in c(10, 20, 30)) for (p in
> c(0.3, 0.4, 0.5)) print(moedas(n,p))}
> simulacao(proporcao, moedas)
> 
> Outro ponto é que você poderia usar rbinom() para os sorteios, enxugando
> seu código. Deixo uma ideia abaixo:
> 
> ### <code r>
> args(rbinom) ### function (n, size, prob)
> vetor_moedas <- rbinom(100, 1, .4); vetor_moedas
> sum(vetor_moedas)/length(vetor_moedas) ### proporção final
> 
> for (n in c(10, 20, 30)) for (p in c(0.3, 0.4, 0.5)) print(rbinom(n, 1,p))
> #  [1] 0 1 1 0 0 0 0 0 0 0
> #  [1] 0 0 0 0 0 0 1 0 0 1
> #  [1] 0 1 1 0 0 0 0 1 0 1
> #  [1] 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0
> #  [1] 0 1 0 0 0 1 0 1 0 0 0 1 1 0 0 1 0 0 0 0
> #  [1] 0 0 0 1 0 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1
> #  [1] 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0
> #  [1] 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 1 1 0 0 0
> #  [1] 1 0 0 1 1 1 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1 0
> ### </code>
> 
> 
>> ================================================
> Éder Comunello
> PhD Student in Agricultural Systems Engineering (USP/Esalq)
> Brazilian Agricultural Research Corporation (Embrapa)
> Dourados, MS, Brazil [22 16.5'S, 54 49.0'W]
> 
> 
> 
> 
> Em 27 de janeiro de 2016 03:33, Paulo Henrique Pimenta <
> paulopimenta6 em hotmail.com> escreveu:
> 
> > Olá a todos
> >
> > Estou escrevendo um código que calcula o lance de uma moeda jogada e a
> > probabilidade dela acontecer em respostas de 1 para cara e 0 para coroa,
> > num bloco do meu código fiquei com uma dúvida relacionada a vetorização.
> > Abaixo passarei todo o código e irei destacar o que me traz a dúvida:
> >
> > ####Laboratorio 1 de R
> >
> > ###cara eh 1
> > ###coroa eh 0
> > vetor_moedas <- NULL
> > vetor <- NULL
> > a <- NULL
> >
> > moeda <- function(p){
> >
> > if(runif(1) < p){
> >
> >                  y <- 1
> >
> >                  }else{
> >
> >                        y <- 0
> >
> >                       }
> >                                 return(y)
> >
> >                                 }
> >
> > ####separando uma funcao da outra####
> >
> > moedas <- function(numeros,probabilidade){
> >
> >                                                for (i in 1:numeros){
> >
> >                                                vetor[i] <-
> > moeda(probabilidade)
> >
> >                                                                         }
> >
> >                                                return(vetor)
> >
> >                                                }
> >
> >
> > ####separando uma funcao da outra####
> >
> > proporcao <- function(moedas){
> >
> >                            numeros_1 <- sum(vetor_moedas)
> >
> >                            numeros_totais <- length(vetor_moedas)
> >
> >                            proporcao_final <- numeros_1/numeros_totais
> >
> >                            return(proporcao_final)
> >
> >                           }
> >
> > ####separando uma funcao da outra####
> >
> > simulacao <- function(proporcao, moedas){
> >
> > ###variando o "n" e o "p"
> >
> > for (i in 1:500){
> >
> > \\Aqui começa a minha, pois como fazer com que o vetor a1 aloque como
> > data.frame todos os dados feitos pela função moedas, como fazer com que a2
> > também aloque um outro data.frame que aloque informações da função moedas e
> > assim por diante...
> >
> >   n <- c(10, 20, 30, 40, 50)
> >   p <- c(0.2, 0.3, 0.4, 0.5)
> >
> > a[i] <- data.frame(moedas(n[i],p[i]))
> >
> > \\ As vezes ele só aloca o que é produzido em moedas(n[1],p[1]) em a1 e
> > recicla o restante. Se alguém quiser testar fiquem a vontade para ajudar!
> >
> >                }
> >
> >
> > return(a)
> >
> >                                        }
> >
> > ##############################
> > ##############################
> > ###Probabilidade de ser cara ou 1 eh 0.5 - funcao moeda
> > ###lancamento de 10 moedas - funcao moedas
> >
> > ###comeco das chamas
> >
> > #########################################
> > prob <- 0.4
> >
> > moeda(prob)
> >
> > #########################################
> > n_1 <- 100
> >
> > moedas(n_1, prob)
> >
> > #########################################
> >
> > vetor_moedas <- moedas(n_1, prob)
> >
> > #########################################
> >
> > proporcao(vetor_moedas)
> >
> > #########################################
> >
> > simulacao(proporcao,moedas)
> >
> > ###
> > ###
> > ##############################
> >
> >
> > Um grande abraço a todos!!
> >
> > Paulo Henrique de A. S. Pimenta.
> >
> > Graduando em Meteorologia (Bacharelado) - IAG/USP.
> > Fone: +5511981318435.
> >
> > _______________________________________________
> > 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.
> >
> -------------- Próxima Parte ----------
> Um anexo em HTML foi limpo...
> URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160127/515a392f/attachment-0001.html>
> 
> ------------------------------
> 
> Subject: Legenda do Digest
> 
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> 
> 
> ------------------------------
> 
> Fim da Digest R-br, volume 61, assunto 17
> *****************************************
 		 	   		   		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160128/eb87f96d/attachment.html>


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