矢量化R函数

时间:2013-05-14 13:54:59

标签: r vectorization

我有以下功能

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,我需要的是应用sum。如果不使用if条件维度,是否有一种优雅的方法呢?

1 个答案:

答案 0 :(得分: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就像你在那里寻找的那样。