2014-02-03 2 views
-2

Мне мой следующий лектор прочитал следующий код, и, хотя он отлично работает для моих заданий и т. Д., Я хочу немного упростить его, если это возможно. Он работает путем вычисления ошибки I типа повторных испытаний и показывает вероятность остановки испытаний на определенных этапах, если они являются достаточными успешными результатами. Он также вычисляет среднее и стандартное отклонение размеров выборки для испытаний. Это код:Я хочу сделать этот код R более эффективным

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 

Мне было также интересно, если это возможно, чтобы создать строки в таблице, созданной в конце для удобства чтения, но я не уверен, если это возможно.

+1

Пожалуйста сделайте ваш вопрос более конкретно. –

+0

Мне интересно, может ли код быть написан более кратким образом, т. Е. Меньше строк кода или более основных команд, можно ли заменить цикл for на что-то еще, чтобы ускорить работу программы? и т. д. – user3018640

+0

Что мы имеем в виду, так это то, что StackOverflow не предназначен для таких открытых вопросов. Если бы вы переписывали этот код и застряли с определенным кодом, который вы написали в этом процессе, это было бы более уместным. – joran

ответ

1

Первый цикл можно записать в виде:

c(nCuts[1], diff(nCuts)) 
Смежные вопросы