r-使用mapply通过带函数的向量逐元素变换向量



有一个关于mapply使用的问题。

考虑以下两种情况:案例1显示了我想要做的事情的简化示例。我使用mapply用存储在vector trans中的函数对我的vector k元素进行变换。这个工作(与这个问题有关)

案例2中,我希望做一些类似的事情,但是,我想要额外的函数参数(这里,存储在a中)。但我可能想要n个函数参数。在这个例子中,我得到的是一个3x3矩阵,对角线上有预期的结果。我只想要对角线的计算输出。怎样

k <- seq(1:3)
# Case 1 -----------------------------------------------------------------------
trans <- c(function(x) x, function(x) 1/x, function(x) x^2)             
# transform vektors elementwise with functions in a "transform" vektor
ktrans   <- mapply(function(f, x) f(x), trans, k)
# 2 -----------------------------------------------------------------------
k <- seq(1:3)
a <- rep(2,3)
transa <- c(function(x,a) x*a, function(x,a) 1/x*a, function(x,a) x^2*a)
ktransa   <- mapply(function(f, x,a) f(x,a), transa, MoreArgs= list(x = k, a= a))
> diag(ktransa)
[1]  2  1 18

解决方案:

我没有使用列表将参数发送到函数,而是明确地执行了以下操作:

# 3 --- Example with n arguments -----------------------------------
k <- seq(1:3)
a <- rep(2,3)
transa <- c(function(x,a) x*a, function(x,a) 1/x*a, function(x,a) x^2*a)
ktransa   <- mapply(function(f, x, a) f(x,a), transa,x = k , a = a)

最新更新