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