r中的循环函数

时间:2015-07-08 11:20:50

标签: r function for-loop

我在使用以下功能时遇到一些麻烦。这只是我必须使用的功能的简化。

数据示例:

x = c(1628.584,2071.944,3365.916, 6450.724)
n = length(x)
r = seq(0.1,0.5,by=0.1)
q = seq(0,2,by=1)

然后我编写了一个必须在下一个函数中使用的函数:

 gh <- function(r,q){
    ifelse(r>0 & p>1, r*p,
           ifelse(r>0 & p==1, q+1-r, NA))
  } 

我想要的下一个功能是:

# p=1
# d <- (log(x[p])/log(n^(-1))-outer(r,q,gh))^2
# p=2
# f <- (log(x[p])/log(n^(-1))-outer(r,q,gh))^2
# p=3 
# g <- (log(x[p])/log(n^(-1))-outer(r,q,gh))^2
# p=4
# k <- (log(x[p])/log(n^(-1))-outer(r,q,gh))^2
#
# z <- d+f+g+k

因此,我写道:

ws <- function(r,q){
  we=0
  for(p in seq(from=1,to=4, by=1)){
    we= we+ (log(x[p])/log(n^(-1))-outer(r,q,gh))^2
  }
  return(we)
}

o <-ws(r,q)

但后来我收到了错误:

Error in ifelse(r > 0 & p > 1, r * p, ifelse(r > 0 & p == 1, q + 1 - r,  : 
                                                 object 'p' not found 

我无法理解,因为我正在循环“p”?

1 个答案:

答案 0 :(得分:3)

来自?outer

  

外(X,Y,FUN =“*”,......)

     

...要传递给

的可选参数

因此,您可以在函数中添加参数p:

gh <- function(r,q,p){
  ifelse(r>0 & p>1, r*p,
         ifelse(r>0 & p==1, q+1-r, NA))
} 

然后使用...参数调用它:

outer(r,q,gh,p=1)
     [,1] [,2] [,3]
[1,]  0.9  1.9  2.9
[2,]  0.8  1.8  2.8
[3,]  0.7  1.7  2.7
[4,]  0.6  1.6  2.6
[5,]  0.5  1.5  2.5

在你的循环中你称之为:

 outer(r,q,gh,p=p)

这就是说我很确定你不需要在这里使用for