【问题标题】:Sapply returning matrix instead of vectorSapply 返回矩阵而不是向量
【发布时间】:2022-10-14 01:35:40
【问题描述】:

我有一个功能

myfunction <- function(x,y){
      x+y
}

我想将 x 和 y 向量传递给它并得到一个长度相同的向量,这只是它们元素的总和。

出于某种原因,当我使用

 sapply(x,myfunction,y) 

我得到一个矩阵而不是一个向量。我究竟做错了什么?我使用了错误的功能吗?

例子:

x = c(1,2,3,4) 
y = c(2,4,6,8)
sapply(x,myfunction,y)
>     [,1] [,2] [,3] [,4]
      [1,]    3    4    5    6
      [2,]    5    6    7    8
      [3,]    7    8    9   10
      [4,]    9   10   11   12

当我想要的输出是一个向量(3,6,9,12)时。

【问题讨论】:

  • 您只需要x + y 而不是循环遍历每个元素,即myfunction(x, y) 如果您需要使用应用函数,请使用mapply(myfunction, x, y)sapply 循环遍历 'x 的每个元素,并添加 y 的所有元素而不是相应的元素
  • 你的sapply 基本上是这样做的:cbind(myfunction(x[1], y), myfunction(x[2], y), myfunction(x[3], y), myfunction(x[4], y))

标签: r


【解决方案1】:

算术运算是矢量化的,所以函数可以直接应用

 myfunction(x, y)
[1]  3  6  9 12

对于sapplyX 输入参数被x 使用,因此x 的每个元素都被循环,而y 仍然是整个向量,因此当我们应用该函数时,它返回带有'x' 的每个元素的长度与 'y' 相同,并且默认情况下,sapply 使用simplify = TRUE,它返回一个矩阵。如果我们需要使用 *apply 函数,那么我们可能需要 mapplyMap

mapply(myfunction, x, y)

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2018-07-31
    • 2020-04-08
    • 2019-04-05
    相关资源
    最近更新 更多