2016-10-27 3 views
1

Так что я сейчас пишу некоторый код R для класса.TryCatch, который возвращает значение моему вектору

library(pwr) 
delta <- c(2.5, 5, 7.5,10) 
v <- c(4,6,9,13) 
size <- vector() 


for (i in (v)){ 
    for (j in (delta)){ 
    tryCatch({ 
fRough <- sqrt(((1/i)*(j)^2)/(2*ucb2)) 
samplesize <- pwr.anova.test(k =i, f = fRough, sig.level = 0.05, power = 0.9) 
size <- c(size, (trunc((samplesize[["n"]]),0)+1)*i) 
    }, error = function(e)(size <- c(size, i*2))) 
    } 
} 

ucb2 - всего лишь некоторое значение поплавка. Я хочу запустить этот цикл, но он дает ошибку, когда delta 7.5 и 10. Я хочу, чтобы мой код выдавал значение (i * 2), когда он ударил ошибку. Я попытался использовать функцию ошибки, но она, похоже, не работала. Кроме того, кто-то может предложить материал, где я мог бы узнать о функции (e), функции (cond) и т. Д. Я не могу найти ответ на SO.

Заранее благодарим за помощь.

+0

Try [эта глава] (http://adv-r.had.co.nz/Exceptions-Debugging.html) из Хедли Advanced R, чтобы начать работу с обработкой исключений. – twalbaum

ответ

0

Проблема в том, что вы пытаетесь выполнить обновление функции size внутри функции ошибки. Обновление size для возвращаемого значения функции ошибки будет делать трюк:

for (i in (v)){ 
    for (j in (delta)){ 
    size <- tryCatch({ 
     fRough <- sqrt(((1/i)*(j)^2)/(2*ucb2)) 
     samplesize <- pwr.anova.test(k =i, f = fRough, sig.level = 0.05, power = 0.9) 
     c(size, (trunc((samplesize[["n"]]),0)+1)*i) 
    },error = function(e) c(size, i*2)) 
    } 
} 
+0

Это работало как шарм! Спасибо – Saxman

+0

@ Саксман Великий. Вы отметите этот ответ правильно? – twalbaum

Смежные вопросы