首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R模拟编程效率

R模拟编程效率
EN

Stack Overflow用户
提问于 2014-07-11 04:04:42
回答 1查看 104关注 0票数 1

我是一个相对较新的R程序员,我写了一个脚本,它获取一些统计结果,并最终将其与目标变量已被随机化的结果向量进行比较。结果向量包含n个模拟的统计结果。随着模拟数量的增加(我希望至少运行10,000个模拟),运行时间比我希望的要长。我已经尝试过用我知道的修改代码的方法来提高性能,但我希望能得到其他人的帮助来优化它。下面是代码的相关部分。

代码语言:javascript
复制
#CREATE DATA   

require(plyr)

Simulations <- 10001
Variation <- c("Control", "A", "B","C")
Trials <- c(727,724,723,720)
NonResponse <- c(692,669,679,682)
Response <- c(35,55,44,38)
ConfLevel <- .95

#PERFORM INITIAL CALCS  

NonResponse <- Trials-Response
Data <-data.frame(Variation, NonResponse, Response, Trials)
total <- ddply(Data,.(Variation),function(x){data.frame(value = rep(c(0,1),times =   c(x$NonResponse,x$Response)))})
total <- total[sample(1:nrow(total)), ]
colnames(total) <- c("Variation","Response")

#CREATE FUNCTION TO PERFORM SIMULATIONS   

targetshuffle <- function(x) 
{
  shuffle_target <- x[,"Response"] 
  shuffle_target <- data.frame(sample(shuffle_target)) 

  revised <- cbind(x[,"Variation"], shuffle_target) 
  colnames(revised) <- c("Variation","Yes")

  yes_variation <- data.frame(table(revised$Yes,revised$Variation))
  colnames(yes_variation) <- c("Yes","Variation","Shuffled_Response")
  Shuffled_Data <- subset(yes_variation, yes_variation$Yes==1)
  Shuffled_Data <- Shuffled_Data[match(Variation, Shuffled_Data$Variation),]
  yes_variation <- cbind(Data,Shuffled_Data)

  VectorPTest_All <- yes_variation[,c("Variation","NonResponse","Response","Trials","Shuffled_Response")]
  Control_Only <- yes_variation[yes_variation$Variation=="Control",]
  VectorPTest_Chall <- subset(yes_variation,!(Variation=="Control"))
  VectorPTest_Chall <- VectorPTest_Chall[,c("Variation","NonResponse","Response","Trials","Shuffled_Response")] 

  ControlResponse <- Control_Only$Response
  ControlResponseRevised <- Control_Only$Shuffled_Response
  ControlTotal <- Control_Only$Trials
  VariationCount <- length(VectorPTest_Chall$Variation)          

  VP <- data.frame(c(VectorPTest_Chall,rep(ControlResponse),rep(ControlResponseRevised),rep(ControlTotal)))

  names(VP) <- c("Variation","NonResponse","Response", "Trials", "ResponseShuffled", "ControlReponse", 
             "ControlResponseShuffled","ControlTotal")

  VP1 <<- data.frame(VP[,c(5,7,4,8)]) 
  VP2 <<- data.frame(VP[,c(3,6,4,8)]) 

  ptest <- apply(VP1, 1, function(column) prop.test(x=c(column[1], column[2]), 
                                               n=c(column[3], column[4]),  alternative="two.sided", 
                                               conf.level=ConfLevel,  correct=FALSE)$p.value)

  min_p_value <- min(ptest)

  return(min_p_value)
}

#CALL FUNCTION   

sim_result <- do.call(rbind, rlply(Simulations, targetshuffle(total)))
EN

回答 1

Stack Overflow用户

发布于 2014-07-11 05:12:58

现在,需要考虑的一件事就是创建所有的数据帧。每次这样做的时候,都是在复制组成对象中的所有数据。如果维度是可预测的,您可以考虑在函数开始时创建空矩阵,并在执行过程中填充它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24685304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档