R:如何在满足 if 条件时停止 for 语句

时间:2021-01-16 21:11:31

标签: r dataframe for-loop if-statement time-series

我有一个价格时间序列,我正在尝试创建一个交易策略。我需要在达到 price_cap 后立即停止交易。我将数据存储在数据库中,我需要创建一个指示所有多头头寸的列表(名为 long 的列表)。我尝试了以下方法,但即使满足条件,列表也会继续存储值:

long = list()
for (i in 5:length(index)) {

  long[i] = data$target_price[i]
  
    if (data$target_price > price_cap){
    
      break
    
    }
  
  print(long)
  
}

有什么想法吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

if 不是矢量化函数。它需要一个长度为 1 的输入逻辑表达式。因此,在循环内部,我们需要 data$price[i] 而不是整列

for(i in seq_len(nrow(data))) {
    long[[i]] <- data$target_price[i]
    if(data$target_price[i] > price_cap) {
       break
     }
   }
long

数据

long <- list()
data <- data.frame(target_price = c(5, 10, 5, 20))
price_cap <- 6

答案 1 :(得分:2)

我认为 @akrun 已经指出了问题并给出了明确的解决方法。

下面是您的目标的另一种实现

long <- with(data, as.list(target_price[seq(min(which(target_price > price_cap)) + 1)]))

给出

> long
[[1]]
[1] 5

[[2]]
[1] 10