我试图将任意长度的参数向量组合成一个逻辑计算。基本上,我正在尝试计算:
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
答案 0 :(得分:1)
do.call
和mapply
可以提供帮助。
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