1

私はデータフレームを持っています:

priors <- data.frame(dist = c('lnorm', 'beta', 'gamma'),
                      a   = c(0.5, 1, 10),
                      b   = c(0.4, 25, 4),
                      n   = c(100, 100, 100)
                     )

そして、パラメーターaとbを使用して分布からn個のサンプルを取得したいと思います。

私はこの関数を書きました:

pr.samp <- function(n,dist,a,b) {eval (parse ( 
                    text = 
                    paste("r",dist,"(",n,",",a,",",b,")",sep = "")
                    ))}

私が知りたいのですが:

  1. より良いアプローチはありますか?
  2. 適用関数の1つを使用して、各行でこれを実行するにはどうすればよいですか?
  3. これを行うには、データフレームをマトリックスに変換する必要がありますか?

前もって感謝します!

4

1 に答える 1

2

?do.callを参照してください

pr.samp <- function(n,dist,a,b) {
    do.call(paste('r',dist,sep=""),list(n,a,b))
}

データフレームに文字ベクトルと数値ベクトルが混在しているため、適用の使用は困難です。行にapplyを使用すると、文字ベクトルが得られ、エラーが発生します。マトリックスに変換すると、文字マトリックスが得られます。私は次のようなことをします:

sapply(1:nrow(priors),function(x){
  pr.samp(priors$n[x],priors$dist[x],priors$a[x],priors$b[x])})

あるいは、ジョシュアの解決策はよりクリーンです:

sapply(1:nrow(priors), function(x) do.call(pr.samp,as.list(priors[x,])))
于 2010-10-01T22:11:50.870 に答える