20

データ フレームを作成する関数があるとします。以下のように、さまざまな入力値でその関数を実行し、結果を 1 つの大きなデータ フレームにまとめて rbind したいと思います。

CreateDataFrame <- function(type="A", n=10, n.true=8) {
  data.frame(success=c(rep(TRUE, n.true), rep(FALSE, n - n.true)), type=type)
}
df <- do.call(rbind, lapply(toupper(letters[1:5]), CreateDataFrame))

私の CreateDataFrame 関数は 3 つの引数を取ります。上記の例では、2 番目と 3 番目の引数は一定に保たれます。上記と同じことをしたいのですが、呼び出しごとに 2 番目と 3 番目の引数を変更します。次のように、mapplyを使用する必要があると思います:

mapply("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4)

mapply がリストを返さないため問題が発生しており、実行できませんdo.call(rbind, mapply(...))。上の例のように、単一のデータ フレームを作成するにはどうすればよいですか?

mapply がリストのマトリックスを返しているようです。データフレームのリストを返すことを期待していました。どうすればいいですか?

4

2 に答える 2

36

戻り値として data.frames のリストを取得するには、mapplySIMPLIFY引数をに設定しFALSEます。(そのデフォルト値はTRUEで、これは関数に「結果をベクトル、行列、またはより高い次元の配列に縮小しようとする」ように指示します-まさにあなたが経験したことです)。

res <- mapply("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4, 
              SIMPLIFY = FALSE)

identical(class(res), "list")
[1] TRUE
于 2012-01-04T20:47:53.813 に答える