【问题标题】:Apply multiple-output function to vector in R将多输出函数应用于R中的向量
【发布时间】:2019-11-22 04:43:52
【问题描述】:

我有一个函数可以将多个输出作为列表返回。我想将此函数应用于输入向量,并将结果收集到向量列表中。下面的代码可以满足我的要求,但有几个缺点。首先,我需要明确给出 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)
)

【问题讨论】:

  • 你能做到`f(x)`

标签: r


【解决方案1】:

这应该只是在 x 上应用函数

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

#$cube
#[1]  1  8 27

【讨论】:

  • 我不确定我是否理解返回列表的函数的语义,但这可行!
【解决方案2】:

你可以试试do.call这个功能

do.call(f, list(x))

【讨论】:

  • 这个答案也有效,但我接受另一个答案,因为它更简单。
【解决方案3】:

你可以试试——

> 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

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多