
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@ipec.fiocruz.br email: emmanuel.brasil@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