设置
我将在这个例子中使用来自tidyverse的tibble()来存储函数。
说我有以下的tibble(这是一个不同的功能),
cost.matrix< - tibble(cost = c(…
这是懒惰评估而不是范围界定的问题。问题是, Composite 函数永远不会评估 f 要么 g ,它只是创建一个函数,将这些名称作为其正文的一部分。在第一次通话之前,它们的价值不固定。很难弄清楚实际值来解释-6的位置,但修复很简单:改变 Composite 至
Composite
f
g
Composite <- function(f, g) { force(f) force(g) function(...) f(g(...)) }
然后你的原始版本工作。
> data <- cost.matrix %>% + mutate(cost.flow.comp = cost) > for (i in 1:nrow(data)){ + a <- data$cost[[i]] + b <- data$flow[[i]] + want <- Composite(a,b) + data$cost.flow.comp[[i]] <- want + } > data$cost.flow.comp[[4]](5,2) [1] 25
顺便说一句,我怀疑有更多功能的方式来创建 cost.flow.comp 专栏,但我不知道 tidyverse 东西。我会用它做的 mapply ,即
cost.flow.comp
tidyverse
mapply
data$new.column <- mapply(Composite, data$cost, data$flow)