1
我有以下功能向量化的R函数
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
?
您应该为您谈论的两种情况添加示例输入/输出。 – Dason 2013-05-14 14:02:56
'sapply'不是真正的矢量化,它只是一个变相的循环。在我看来,你可能想要“外部”,但正如达森所说的那样,预期的产出会有所帮助。 – baptiste 2013-05-14 14:07:59
您的术语令我感到困惑。您只显示了一维的'x'和'X'。我认为“矢量”意味着一维。你在谈论数组(高维)还是矢量长度大于1? – Frank 2013-05-14 14:11:50