2016-07-28 12 views
0

データで幾何平均を返す関数を作成しようとしています。 try()でループを作り、有効なデータを渡したいのですが、実際に試したものはうまくいきませんでした。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 
} 

機能であると私は、私は有効なデータのための手段を取得したいが、それは0

にすべての値になり、このループで

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 

を、この機能を使用したいです

[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

'ifelse()'が_both_引数を評価することで機能するので、あなたの関数は常に失敗します。たとえば、 'R(1)'などです。 if(g [i]> 0)k < - k * g [i] else stop( "...") 'を実行しますが、 "..."); exp(平均(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

ありがとう! 0.00000の代わりにNAを入れられる方法はありますか? –

+0

上記の答えで 'v = numeric(400)'の代わりに 'v = c(rep(NA、400))'を試してみてください –

関連する問題