2011-06-05 4 views
1

mapplyではなくapplyを使用するVectorizeのバージョンがありますか。 は、その関数に配列を渡し、ベクトルを返すようにベクトル入力を受け付ける関数をベクトル化したいと思います。mapply()ではなくapply()のVectorize()のバージョン?

私は自分のラッパーを書くことができますが、それは十分に機能します。しかし、私はこの機能が組み込まれているのだろうかと思ったのですか?

私はVectorizeも使用できますが、マトリックス入力をdata.frameに変換して作業する必要があります。例えば:私が欲しいものではありませんが、

> my.data <- data.frame(my.data) 
> my.fun(my.data, mean=THETA, S=LAMBDA, df=NU) 
     X1  X2 
0.8130572 0.9996274 

は私が欲しいものである

LAMBDA <- cbind(c(1, .5, .5), c(.5, 1, .5), c(.5, .5, 1)) 
THETA <- c(0,0,1) 
NU <- 21 
my.data <- array(1:6, c(3,2)) 
my.fun <- Vectorize(pmt, vectorize.args="x") 

その後

> my.fun(my.data, mean=THETA, S=LAMBDA, df=NU) 
[1] 0.4404142 0.8130572 0.9667065 0.9961166 0.9996274 0.9999676 

BTW、pmtは、mnormtパッケージに含まれています。多変量解析の学生用です。

答えて

1

あなたは行列my.dataに渡すmy.fun先の関数を定義したいようだ、とmy.funはちょうどそれがmy.dataの各列に関数を適用する必要があることを「知っている」でしょう。これは、apply()の機能です。 Vectorizeコールは必要ありません。それではどうしてこんなことをしないのですか?

my.data <- array(1:6, c(3,2)) 

> apply(my.data, 2, pmt, mean=THETA, S=LAMBDA, df=NU) 

[1] 0.8130572 0.9996274 
+0

「my.data」は行列ではなくベクトルになりますか?もしそうなら、それを1列の行列にすることはできますか? – Aaron

+0

そうならば、 'apply(matrix(my.data、nrow = 3)、2、pmt、mean = THETA、S = LAMBDA、df = NU)'だけが必要です。これは、ベクトルと行列の両方で機能します。 – Aaron

+0

@少なくともAaronの解は、私がそうであれば他の解であっても、少なくとも読みやすさの面では優れています。私は 'Vectorize'が' args < - lapply(as.list(match.call())[ - 1L]、eval、parent.frame()) 'のようなことをしていると思います。私はそれを完全に理解していません。 – kalu

関連する問題