Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想让这个R代码更有效率_R - Fatal编程技术网

我想让这个R代码更有效率

我想让这个R代码更有效率,r,R,我的讲师给了我以下代码,虽然它对我的作业等非常有效,但如果可能的话,我想简化一下。它通过计算重复试验的I型误差来工作,并显示在某些阶段停止试验的概率(如果试验结果足够成功)。它还计算了试验样本量的平均值和标准偏差。代码如下: Table <- function(simulateP,nsims,postcut,hypothesisP,nCuts){ win <- logical(nsims) ss <- numeric(nsims) nInts <- n

我的讲师给了我以下代码,虽然它对我的作业等非常有效,但如果可能的话,我想简化一下。它通过计算重复试验的I型误差来工作,并显示在某些阶段停止试验的概率(如果试验结果足够成功)。它还计算了试验样本量的平均值和标准偏差。代码如下:

Table <- function(simulateP,nsims,postcut,hypothesisP,nCuts){
   win <- logical(nsims)
   ss <- numeric(nsims)

   nInts <- nCuts
   for (i in 2:length(nCuts)){
      nInts[i] <- nCuts[i] - nCuts[i-1]
   }

   for (i in 1:nsims){
      x <- rbinom(length(nCuts),nInts,simulateP)
      x <- c(x[1],x[1]+x[2],x[1]+x[2]+x[3])
      ProbSup <- 1 - pbeta(hypothesisP,1+x,1+nCuts-x)

# Probability of Success
      win[i] <- any(ProbSup > postcut )
# Sample size
      ss[i] <- min(nCuts[ProbSup > postcut],max(nCuts))
   }
   out <- c(length(win[win])/nsims,mean(ss),
                       sqrt(var(ss)),table(ss)/nsims)
   names(out) <- c('Pr(win)','MeanSS','SD SS',as.character(nCuts))
   out
}

## Input these values for the Type I error
> nsims <- 1000000
> postcut <- 0.95
> hypothesisP <- 0.5
> simulateP <- 0.5
> nCuts <- c(50,75,100)
> out <- Table(simulateP,nsims,postcut,hypothesisP,nCuts)

> out
  Pr(win)    MeanSS     SD SS        50        75       100
 0.095770 96.455625 12.247579  0.059165  0.023445  0.917390

Table第一个循环可以写成:

c(nCuts[1], diff(nCuts))

请把你的问题说得更具体一些。我想知道代码是否可以用更简洁的方式编写,即更少的代码行或更基本的命令,是否可以用其他东西来代替for循环来加速程序?等等。我们的意思是StackOverflow不适用于此类开放式问题。如果您正在重新编写此代码,并且在编写过程中遇到了一段特定的代码,那么这将更合适。对不起,我完全误解了这个问题。我遇到的确切问题是第一个for循环。你能想出一个更好的方法来计算变量nInts吗?我认为第二个是可以的,但是在这么短的程序中,2 for循环对我来说似乎没有必要。这个问题似乎离题了,因为它是关于提高工作代码的效率和/或风格的,更适合codereview StackExchange站点。