R:如何将任意数量的函数和参数组合到一个计算中

时间:2017-11-18 00:33:15

标签: 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]

在实际操作中,我不知道参数IndicatorA,IndicatorB,BuyConditions或BuySigConditions的长度,除了约束IndicatorA,IndicatorB和&amp;的长度。 BuyConditions是相同的,BuySigConditions的长度比其余的少一个。另外,BuyConditions可以是&lt;,&gt;,&lt; =,&gt; =,==,!=中的任何一个,并且BuySigConditions可以是&amp;或者。我将使逻辑功能化,以便用户传入任意长度的向量参数(遵循上面的长度约束),并且我的函数将构造我想要获得的计算,导致此示例为:

[1] FALSE

1 个答案:

答案 0 :(得分: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