在我的智慧结束,所以抱歉这是错误的地方,或者做错了。第一次问。我是R的新手,几乎没有什么编程经验(大学的pascal课程,并且很擅长macromedia术语-所以,不害怕代码)。
为了简短起见,我想最好只是告诉你我有什么,我想要什么。我花了好几个小时来寻找和尝试解决方案。
是我所拥有的一个示例(它是一个名为"signals"的XTS对象,并按天索引(这里省略以使示例简单):
open close position
0 0 0
1 0 0
0 0 0
0 0 0
0 1 0
0 0 0
和我希望发生的事情:
open close position
0 0 0
1 0 1
0 0 1
0 0 1
0 1 1
0 0 0
基本上,当"open"为真时,在"position"重复15,直到"close"为真。我觉得非常简单,但不知怎么的,我就是做不到。这里有一个例子,我认为它可能很接近,但它陷入了一个无尽的循环:
for (i in 1:nrow(signals)) {
if (signals[i,"open"]==1) next
while (signals[i,"close"] == 0) {
signals[i,"position"] <- 1 }
}
谢谢!
编辑-我遗漏了一个重要的限定符。有时候,"close"中的第一个真语句会出现在"open"中的第一个真语句之前。然而,既然我把它写在这里,我想以某种方式"清理"close列会更容易,所以在open列中的第一个1之前没有1。
然而,如果有人知道如何做到这一切,请随意添加额外的信息。谢谢!
不必使用循环:
open <- c(0,1,0,0,0,0)
close <- c(0,0,0,0,1,0)
position <- cumsum(open-close)
position
[1] 0 1 1 1 0 0
注意这是立即关闭的,如果你想在收到关闭信号后继续执行,使用:
cumsum(open-c(0,close[-length(close)]))
[1] 0 1 1 1 1 0
您的while
语句永远不会结束的原因是您没有任何东西可以修改正在测试的内容,即i
不会增加。