r - 编写用户声明的函数时 [] 参数无效
问题描述
一位新的 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
,它怎么会是负数?n
2. 我用rep()
函数精确地制作了两个大小的向量。为什么长度不一样?
***问题已解决。错误源于我在使用 ':' 时没有输入 '()'
解决方案
推荐阅读
- stanford-nlp - 包含下划线字符的实体被CoreNLP中的TokensAnnotation拆分为多个实体
- javascript - 从 JSON 对象中删除字符串
- kubernetes - 只允许出口到互联网
- javascript - CKEDITOR 5 在段落或 p 标签中应用样式
- python - 如何在Dataframe上申请循环
- webpack - ReactDom.render() 中出现 webpack 语法错误
- android - 如何从网页中的链接返回到浏览器启动的暂停活动?
- css - css 没有从 .scss 文件中获取 css
- visual-studio-code - VSCode:无法打开文件
- javascript - 将通道数设置为 10 个对象