我有以下功能
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
条件维度,是否有一种优雅的方法呢?
答案 0 :(得分:0)
您似乎有两个例子,我将它们命名为f
和h
:
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
就像你在那里寻找的那样。