将多输出函数应用于 R 中的向量



>我有一个函数,它以列表的形式返回多个输出。我想将此函数应用于输入向量,并将结果收集到向量列表中。下面的代码做了我想要的,但有几个缺点。首先,我需要明确给出 f 输出列表的名称"square"和"cube"。其次,我需要对 x 的每个值计算函数 f 两次。有没有办法在避免缺点的同时获得与以下代码相同的输出?

f <- function(x) list(square = x^2, cube = x^3)
x <- c(1, 2, 3)
desired.output <- list(
  square = sapply(X = x, FUN = function(x) f(x)$square),
  cube = sapply(X = x, FUN = function(x) f(x)$cube)
)

这应该只是将函数应用于 x

f(x)
#$square
#[1] 1 4 9
#$cube
#[1]  1  8 27

你可以为此尝试do.call函数

do.call(f, list(x))

你可以试试 -

> mapply(f, x)
    [,1] [,2] [,3]
square 1    4    9   
cube   1    8    27  

> Map(f,x)
[[1]]
[[1]]$square
[1] 1
[[1]]$cube
[1] 1

[[2]]
[[2]]$square
[1] 4
[[2]]$cube
[1] 8

[[3]]
[[3]]$square
[1] 9
[[3]]$cube
[1] 27

最新更新