【发布时间】:2017-01-18 00:18:52
【问题描述】:
我想定义任意数量的变量的任意函数,例如,对于 2 个变量:
func2 <- function(time, temp) time + temp
我想保留对问题有意义的变量名(上面的时间和温度)。
如果我有这些变量的值向量,例如在二维情况下,c(10, 121),我想应用我的函数(此处为 func2)并获得结果。从概念上讲,类似于,
func2(c(10,121))
变成
func2(10,121)
对于任意数量的变量,是否有一种简单的方法来完成此操作?
谢谢
【问题讨论】:
-
你来自像 python 这样支持 splatting 的语言吗?调用函数时拆分向量真的有问题吗?从技术上讲,您可以使用
do.call之类的东西来执行此操作,但在 R 中它会变得非常混乱。除非绝对必要,否则我可能不会推荐它。 -
你能把它指定为命名向量吗?例如,
func2(c(time=10, temp=121)). -
我试图重现的是 Mathematica 中经常使用的东西。在 Mathematica 中,像 c(10,121) 这样的表达式将有一个名为 List 的“头”。该头可以用带有“应用”的函数名称替换。 (在多维数组中的任何级别)。下面的答案很有用,但我的最终目标更复杂。我想制作一个多维版本的“外部”。像 my.outer(func, a_vec, b_vec, c_vec, ..) 一样,变量“a”、“b”、“c”等的函数将应用于来自向量外积的向量每个变量的值。
-
我想使用 expand.grid (确实需要重塑输出)。还是有点小问题。
-
这似乎不太奏效:apply(expand.grid(temps,times), 1, function(a) do.call(func2, as.list(a))) 虽然这做:do.call(func2, as.list(c(10, 121)))