【问题标题】:function with loop in rr中带有循环的函数
【发布时间】:2015-09-26 06:35:09
【问题描述】:

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

数据示例:

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" ?

【问题讨论】:

  • 问题是p没有在gh函数内部定义
  • for(p in seq(from=1,to=4, by=1)) 可以写成 for (p in 1:4)

标签: r function for-loop


【解决方案1】:

来自?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

【讨论】:

  • 感谢您的快速回答,我还是有点麻烦。如果我输入你写的内容,我会收到以下错误:FUN(X,Y,...)中的错误:未使用的参数(p = 1)我还是 R 的新手,这可以通过更简单的应用来完成吗?
  • @Mathy 我认为你应该开始一个新的 R 会话。
猜你喜欢
  • 2016-10-05
  • 1970-01-01
  • 2017-08-28
  • 2021-07-05
  • 2015-04-04
  • 2019-09-15
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多