[R-br] Otimizando um loop

Pedro Emmanuel Alvarenga Americano do Brasil emmanuel.brasil em gmail.com
Quarta Fevereiro 6 17:59:25 BRST 2013


Amigos de R,

Gostaria de uma ajuda ara otimizar um loop.

Simulei algumas populaçoes com resultados de testes. Agora quero amostrar
mil amostras de cada população e cada set de 1000 amostras em algumas
condições como tamanho da amostra e prevalencia do evento do interesse. Ao
total seriam mais de 1500 amostragens. Por isso, qualquer dica para
torna-lo mais rápido e eficiente será bem vinda. Eu sei que faltou diversas
populações.... mas é que o arquivo é grande.

O script inicial...

with <- 250000
without <- 250000
set.seed(as.numeric(Sys.time()))

#Population 1: bi-normal distribution with equal varainces

# Population 1 with AUC = .9
pop1 <- round(rnorm(without,200,60))
pop1 <- as.data.frame(cbind(0,pop1))
colnames(pop1) <- c('reference','test')
# pop1[1:10,];nrow(pop1)
pop1temp <- round(rnorm(without,309,60))
pop1temp <- as.data.frame(cbind(1,pop1temp))
colnames(pop1temp) <- c('reference','test')
# pop1temp[1:10,]; nrow(pop1temp)
pop1_9 <- rbind(pop1,pop1temp) # nrow(pop1)
rm(pop1temp,pop1)

.... outras populações....

> population <- ls()
> samp_size <- c(50,100,150,300,500,1000,3000)
> prev <- c(.05,.1,.2,.3,.5,.75)
>
> conditions <- expand.grid(population,samp_size,prev)
> conditions <-
cbind(conditions[,1],substr(conditions[,1],1,4),as.numeric(substr(conditions[,1],6,6))/10,conditions[,2:3])
> names(conditions) <-
c('dataset','population','auc','samp_size','prevalence')
> conditions$dataset <- as.character(conditions$dataset)

> head(conditions)
  dataset population auc samp_size prevalence
1  pop1_6       pop1 0.6        50       0.05
2  pop1_7       pop1 0.7        50       0.05
3  pop1_8       pop1 0.8        50       0.05
4  pop1_9       pop1 0.9        50       0.05
5  pop2_6       pop2 0.6        50       0.05
6  pop2_7       pop2 0.7        50       0.05

> setwd('E:/Banco/cutoff/datasets')

# O problema começa aqui onde eu preciso amostrar de diversos bancos de
dados em sequencia armazenados na área de trabalho, mas não consigo fazer
isso de forma elegante. então eu acabei usando o parse mas antes preciso
salvar o nome do banco no disco, e quando consigo fazer isso vem um aviso
que não consigo entender.

# Aqui deveria começar o loop seguindo as condições do banco conditions.

> cat(conditions[1,1],file="expr"); dataux <- eval(parse(file="expr"))
Mensagens de aviso perdidas:
In readLines(file) : linha final incompleta encontrada em 'expr'
> with <-
sample(dataux[which(dataux$reference==1),2],ceiling(conditions[1,4]*conditions[1,5]),T)
> without <-
sample(dataux[which(dataux$reference==0),2],conditions[1,4]*(1-conditions[1,5]),T)
> with <- cbind(reference=1,test=with)
> without <- cbind(reference=0,test=without)
> tempdata <- data.frame(rbind(with,without))

>
write.csv2(tempdata,paste0(conditions[1,1],'_',conditions[1,4],'_',substr(conditions[1,5],3,4),'.csv'),row.names
= F)
>

# aqui deveria terminar o loop

Abraço,

Dr. Pedro Emmanuel A. A. do Brasil
Curriculum Lattes:  http://lattes.cnpq.br/6597654894290806
Instituto de Pesquisa Clínica Evandro Chagas
Fundação Oswaldo Cruz
Rio de Janeiro - Brasil
Av. Brasil 4365,
CEP 21040-360,
Tel 55 21 3865-9648
email: pedro.brasil em ipec.fiocruz.br
email: emmanuel.brasil em gmail.com

---Apoio aos softwares livres
www.zotero.org - gerenciamento de referências bibliográficas.
www.broffice.org ou www.libreoffice.org - textos, planilhas ou
apresentações.
www.epidata.dk - entrada de dados.
www.r-project.org - análise de dados.
www.ubuntu.com - sistema operacional
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130206/de8b6538/attachment.html>


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