2017-11-18 70 views
1

我试图将任意长度参数的向量组合成一个逻辑计算。基本上,我试图计算:R:如何将任意数量的函数和参数合并为一个计算

get("&")(get("&")(sigBuy(">", 
       30.30815, 
       30.39961), 
      sigBuy(">", 
       30.39961, 
       30.47286)), 
      sigBuy(">", 
       30.47286, 
       30.519)) 

从以下几组参数:

IndicatorA <- c(30.30815, 30.39961, 30.47286) 
IndicatorB <- c(30.39961, 30.47286, 30.519) 
BuyConditions <- c(">", ">", ">") 
BuySigConditions <- c("&", "&") 

和功能sigBuy():

sigBuy <- function(BuyCondition, IndicatorA, IndicatorB) { 
    out <- get(get("BuyCondition"))(IndicatorA, IndicatorB) 
    return(out) 
} 

我尝试应用的实际逻辑在这种情况下是

IndicatorA[1] > IndicatorB[1] & 
    IndicatorA[2] > IndicatorB[2] & 
    IndicatorA[3] > IndicatorB[3] 

I在实际操作中,我不知道参数IndicatorA,IndicatorB,BuyConditions或BuySigConditions的长度,除了限制IndicatorA,IndicatorB,& BuyConditions的长度相等,BuySigConditions的长度比其余的长度小1 。此外,BuyConditions可以是<,>,< =,> =,==,!=中的任意一个,BuySigConditions可以是&或|。我将功能化逻辑,以便用户可以传入任意长度的矢量参数(以上是长度限制),我的函数将构造我正在尝试获得的计算结果,例如:

[1] FALSE 

回答

1

do.callmapply可以在这里帮助。

sigBuy <- function(cond, ...) do.call(cond, list(...)) 
reln <- mapply(sigBuy, BuyConditions, IndicatorA, IndicatorB) 

result <- reln[1] 
for(i in seq_along(BuySigConditions)) 
    result <- do.call(BuySigConditions[i], list(result, reln[i+1])) 
result 
+0

这是完美的,谢谢! –

相关问题