2016-07-28 90 views
0

我正在嘗試使函數返回幾何平均值與數據。 我想循環嘗試()傳遞有效的數據,但我試過實際上沒有工作。在R中嘗試處理錯誤

這是功能

R=function(g) 
{ 
k=1 
n=length(g) 
for(i in 1 : n) 
{ 
ifelse(g[i]>0, k<-k*g[i], stop("Negative component")) 
k 
} 
t=k^(1/n) 
t 
} 

,我想在這個循環中

set.seed(123) 
data <- matrix(rnorm(10000, mean=3), ncol=25, dimnames=list(NULL, paste("X", 
1:25, sep="."))) 


v=rep(0,400) 
for(i in 1 : 400) 
{ 
try("v[i]=R(data[,i])",TRUE) 
} 
v 

我想獲得有效數據的手段使用此功能,但它使所有的值改爲0

[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[37] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[73] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[109] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[145] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[181] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[217] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[253] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[289] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[325] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[361] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

[397] 0 0 0 0 

你能告訴我哪裏錯了嗎? 謝謝

+0

您的函數總是失敗,例如'R(1)',因爲'ifelse()'通過評估_both_參數來工作。如果(!all(g> 0))停止,你想'if(g [i]> 0)k <-k * g [i] else stop(「...」)',但真的只是避免迭代「......」); exp(mean(log(g)))' –

回答

1

我想問題是t作爲一個數字向量和try()函數的語法丟失聲明。下面的代碼應該可以工作,它爲我工作。

R=function(g) 
{ 
t = numeric(length(g)) 
k=1 
n=length(g) 
for(i in 1 : n) 
{ 
    ifelse(g[i]>0, k<-k*g[i], stop("Negative component")) 
} 
t=k^(1/n) 
t 
} 
set.seed(123) 
data <- matrix(rnorm(10000, mean=3), ncol=25, dimnames=list(NULL,paste("X", 
                    1:25, sep="."))) 

v=numeric(400) 
for(i in 1 : 400) 
{ 
try(v[i]<-R(data[i,]),TRUE) 
} 
v 
+0

謝謝!有什麼辦法可以把NA而不是0.00000? –

+0

嘗試'v = c(rep(NA,400))'而不是'v = numeric(400)'在上面的答案中 –