[R-br] Dúvida em looping e data.frame
Paulo Henrique Pimenta
paulopimenta6 em hotmail.com
Quinta Janeiro 28 01:29:37 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.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160128/97ad853f/attachment.html>
Mais detalhes sobre a lista de discussão R-br