1

我有以下功能

f <- function(x){sum(g(x - X))}

在哪里

X - n-dimensional vector with some data
g is some vecrtorized function

如何对函数进行矢量化,f以便它可以采用 n 维输入并产生 n 维输出?

我正在尝试以下

rowSums(sapply(x, "-", X))

这种方法的问题是它没有涵盖一维的情况x。是否可以涵盖这两种情况?例如让

x <- c(1,2,3)
X <- c(6,9,1)
g <- function(x){x^2}

如果我使用sapply基于 - 的代码,我会得到正确的答案(n 维向量)

rowSums(sapply(x, "-", X))
[1] -12 -21   3

但是如果我设置x=1并运行相同的代码,我会得到错误的答案(n 维向量而不是标量)

rowSums(sapply(x, "-", X))
[1] -5 -8  0

这并不奇怪,因为rowSums应用于列向量给出了列向量。但是,在一维的情况下,我需要的x是 apply sum。有没有一种优雅的方法可以在不使用if尺寸条件的情况下做到这一点?

4

1 回答 1

0

似乎您有两个示例,我将它们命名fh

X <- c(6,9,1)

g <- function(x){x^2}
f <- function(x){sapply(x,function(x)sum(g(x - X)))}

f(1) 
# [1] 89
f(1:3)
# [1] 89 66 49

h <- function(x){colSums(sapply(x,function(x) x-X))}
h(1)
# [1] -13
h(1:3)
# [1] -13 -10  -7

它看起来就像colSums你在那里寻找的东西。

于 2013-05-14T14:21:33.090 回答