2016-07-28 80 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)'在上面的答案中 –