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

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@hotmail.com> To: "r-br@listas.c3sl.ufpr.br" <r-br@listas.c3sl.ufpr.br> Subject: [R-br] Dúvida em looping e data.frame Message-ID: <BAY182-W241C2B8A79DFC8287003AFF4D90@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@gmail.com> To: "r-br@listas.c3sl.ufpr.br" <r-br@listas.c3sl.ufpr.br> Subject: Re: [R-br] Dúvida em looping e data.frame Message-ID: <CABmC8gmxHtjGenrn6us=VnsgRE2E1B_zCY_nBZ+Vnyp1CZX5nw@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@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.

Bom dia, Paulo! Uma forma simples é acumular os resultados em uma lista de vetores. Posteriormente você pode operar a lista para cálculos de interesse. ### <code r> res <- NULL for (n in c(10, 20, 30)) for (p in c(0.3, 0.4, 0.5)) { sim <- rbinom(n, 1,p) res <- c(res, list(sim)) } res ### exemplo de operação com lista - cálculo das proporções sapply(res, function(x) sum(x)/length(x)) ### </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]

Uma pequena alteração para nomear as séries... ### <code r> res <- NULL for (n in c(10, 20, 30)) for (p in c(0.3, 0.4, 0.5)) { id <- paste(n, p, sep="_") sim <- list(rbinom(n, 1,p)); names(sim) <- id res <- c(res, sim) } res ### exemplo de operação com lista - cálculo das proporções sapply(res, function(x) sum(x)/length(x)) ## 10_0.3 10_0.4 10_0.5 20_0.3 20_0.4 20_0.5 30_0.3 30_0.4 30_0.5 ## 0.3000000 0.3000000 0.5000000 0.3000000 0.3000000 0.4000000 0.2333333 0.4000000 0.6000000 ### </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 28 de janeiro de 2016 08:03, Éder Comunello <comunello.eder@gmail.com> escreveu:
Bom dia, Paulo!
Uma forma simples é acumular os resultados em uma lista de vetores. Posteriormente você pode operar a lista para cálculos de interesse.
### <code r> res <- NULL for (n in c(10, 20, 30)) for (p in c(0.3, 0.4, 0.5)) { sim <- rbinom(n, 1,p) res <- c(res, list(sim)) }
res
### exemplo de operação com lista - cálculo das proporções sapply(res, function(x) sum(x)/length(x))
### </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]
participantes (2)
-
Paulo Henrique Pimenta
-
Éder Comunello