首页 > 解决方案 > 如何将多变量向量值函数的输出收集到数据框中?

问题描述

我有一个函数f1,它接受一对实数(x, y)并返回三个实数。我想x在一个向量ay一个向量中收集这个函数的所有输出b。您能否详细说明如何执行此操作?

f1 <- function(x, y){
  return (c(x+y, x-y, x*y))
}

a <- seq(0, pi, 0.1)
b <- seq(0, 2 * pi, 0.1)

更新:我的意思是对于所有对 $(x, y) \in a \times b$。

标签: rfunctiondataframevector

解决方案


这是一个data.table选项

setDT(expand.grid(a, b))[, fval := do.call(Vectorize(f1, SIMPLIFY = FALSE), unname(.SD))][]

使用expand.grid++的do.call地方Vectorize,给出

      Var1 Var2              fval
   1:  0.0  0.0             0,0,0
   2:  0.1  0.0       0.1,0.1,0.0
   3:  0.2  0.0       0.2,0.2,0.0
   4:  0.3  0.0       0.3,0.3,0.0
   5:  0.4  0.0       0.4,0.4,0.0
  ---
2012:  2.7  6.2  8.90,-3.50,16.74
2013:  2.8  6.2  9.00,-3.40,17.36
2014:  2.9  6.2  9.10,-3.30,17.98
2015:  3.0  6.2     9.2,-3.2,18.6
2016:  3.1  6.2  9.30,-3.10,19.22

使用更紧凑的CJ(a,b)替代setDT(expand.grid(a, b))(感谢@akrun 的建议)


推荐阅读