1

有一个关于使用的问题mapply

考虑以下 2 个案例: 案例 1显示了我希望做的简化示例。我使用 mapply 将向量 k 元素与存储在向量 trans 中的函数进行转换。这有效(与这个问题有关

案例 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
4

1 回答 1

0

解决方案:

我没有使用列表将参数发送给函数,而是明确地做到了:

# 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)
于 2013-08-23T08:58:01.440 回答