首页 > 解决方案 > 编写用户声明的函数时 [] 参数无效

问题描述

一位新的 R 程序员在这里尝试玩外汇回测。这似乎是我找不到自己的逻辑错误。如果一些更有经验的 R 程序员能对我有所启发,我将不胜感激。

我想用我的代码做什么:我正在编写一个用户声明的函数,它需要 3 个输入:两个 num ( pricehigh& ) 类型的向量(列)和一个默认设置为 10pricelow的常量。n代码应返回 char 类型的向量SwingHigh。我希望函数能够区分在点处pricehigh[i]的值是否高于左右pricehigh索引n处的所有值。如果为真,pricehigh[i]则应标注"SwingHigh",否则应标注"NotSig"

这是代码:

gann.swinghigh <- function(pricehigh, pricelow, n=10L){
 l <- length(pricehigh) #l == length of data.
 SwingHigh <- rep("",l) #create obj: empty char vector of length 'l'
 invalid_points <- c(1:n,l-n+1:l) #Create invalid points that needs to filled with NA.
 SwingHigh[invalid_points] <- NA #Assign NA to unvalid points. 
  for(i in n+1:l-n){ #for the valid points (point i), run:
   high_n <- rep(pricehigh[i],n) #for each valid point, create vector of length n. All with pricehigh[i]
   high_left <- rep(0,n) 
   high_right <- rep(0,n) #create empty num vector with size n.
   lookleft <- rep(NA,n)
   lookright <- rep(NA,n)

   high_left <- c(pricehigh[(i-n):(i-1)]) 
   high_right <- c(pricehigh[(i+1):(i+n)]) #fill vector with price high n points to the left/right of [i].
   lookleft <- high_n > high_left
   lookright <- high_n > high_right
    if(all(lookleft) & all(lookright)){
      SwingHigh[i] <- "SwingHigh"
    } else{
        SwingHigh[i] <- "NotSig"
   }
} 
  return (SwingHigh)
}

代码可以成功执行,但它没有做我想做的事。调用v <- gann.swinghigh(pricehigh=data$High, pricelow=data$Low)控制台时会显示警告消息: Error in pricehigh[(i - n):(i - 1)] : only 0's may be mixed with negative subscripts. In addition: Warning message:In high_n > high_left :longer object length is not a multiple of shorter object length

我的问题: 1. 我理解第一个错误的含义,它表示我正在尝试将 -ve 值输入到序列中。但是在循环中,i从 开始n+1,它怎么会是负数?n2. 我用rep()函数精确地制作了两个大小的向量。为什么长度不一样?

***问题已解决。错误源于我在使用 ':' 时没有输入 '()'

标签: rargumentssequence

解决方案


推荐阅读