首页 > 解决方案 > 如何选择性地执行函数并累积结果

问题描述

我想创建一个函数子组的结果向量。

这是我的意思的简化示例:

# create example functions
set.seed(999)

create_fun <- function(start, len) {
  res <- function() {
    seq(from = start, length.out = len)
  }
  res
}

for (i in 1:4) {
  eval(parse(text = paste0("f", i, "<-create_fun(", sample(1:10, 1), ",",     sample(2:5, 1), ")")))
  # btw is it possible to use something like assign instead of eval-parse?
}

# static version of what I want
c(f1(), f3(), f4())
# 4 5 6 7 8 9 7 8

# dynamic version of what I want
x <- c(f1 = TRUE, f2 = FALSE, f3 = TRUE, f4 = TRUE) # I'd like to start with a vector of function-names to use
# .. but now what?

如何正确执行此操作?

标签: r

解决方案


这是基础 R 中的解决方案:

unlist(lapply(names(x[x]), function(f) get(f)()))

[1] 4 5 6 7 8 9 7 8

首先选择要调用的函数的名称。对于它们中的每一个,get(function_name)()允许对它们进行评估。

请看一下:为什么使用分配不好?


推荐阅读