我在使用以下功能时遇到一些麻烦。这只是我必须使用的功能的简化。
数据示例:
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”?
答案 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
。