1

私は次の機能を持っています

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

どこ

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

fn 次元の入力を取り、n 次元の出力を生成できるように関数をベクトル化するにはどうすればよいですか?

私は次のことを試していました

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

このアプローチの問題は、1 次元の場合をカバーしていないこと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

rowSumscolumn-vector に適用すると列ベクトルが得られるため、これは驚くべきことではありません。ただし、一次元の場合に必要なのxは、適用することsumです。ifディメンションの条件を使用せずにエレガントな方法はありますか?

4

1 に答える 1

0

あなたには2つの例があるようです.私はそれらに名前を付けまし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 に答える