3

次のMyFun(ユーザー定義の)関数を使用して、観測をシミュレートできます。replicateしかし、関数が出力のリストを返すときに、関数でこの関数を繰り返す方法を理解できませんでした。

MyFun <- function(nSim, Size, Prob) {
  M1 <- t(mapply(rbinom, prob = Prob, n = nSim, size = Size))
  dimnames(M1) <- list(Prob, paste0("V", 1:nSim))
  MeanM1 <- M1/Size
  Results1 <- list(M1, MeanM1)
  return(Results1)
}

MyFun(nSim=5, Size=4, Prob=c(0.2, 0.4))

[[1]]
    V1 V2 V3 V4 V5
0.2  2  2  1  2  1
0.4  2  3  0  3  1

[[2]]
     V1   V2   V3   V4   V5
0.2 0.5 0.50 0.25 0.50 0.25
0.4 0.5 0.75 0.00 0.75 0.25

しかし、関数で望ましい結果が得られませんreplicate

replicate(
    n=2
  , MyFun(nSim=5, Size=2, Prob=c(0.2, 0.4))
  , simplify = "array"
  )

    [,1]       [,2]      
[1,] Integer,10 Integer,10
[2,] Numeric,10 Numeric,10
4

2 に答える 2

3

あなたの関数は機能しますが、「奇妙な」出力しかありません。結果を というオブジェクトに格納してみてくださいaa

 aa <- replicate(
+     n=2
+     , MyFun(nSim=5, Size=2, Prob=c(0.2, 0.4))
+     , simplify = T
+ )
 aa
     [,1]       [,2]      
[1,] Integer,10 Integer,10
[2,] Numeric,10 Numeric,10

しかし、その 2 x 2 行列のすべての要素は、それ自体が行列です。これを試して:

 class(aa)
[1] "matrix"
 sapply(aa, class)
[1] "matrix" "matrix" "matrix" "matrix"

実際、前のマトリックスの最初の「セル」を抽出すると、次の出力を含むマトリックスであることがわかりますMyFun

 aa[1,1]
[[1]]
    V1 V2 V3 V4 V5
0.2  0  1  0  0  1
0.4  1  2  0  2  0
于 2015-08-02T17:52:15.040 に答える
3

関数に simple 引数を追加して、 に渡してみてくださいmapply()

MyFun <- function(nSim, Size, Prob, simplify = "array") {
    M1 <- t(
        mapply(rbinom, prob = Prob, n = nSim, size = Size, SIMPLIFY = simplify)
    )
    dimnames(M1) <- list(Prob, paste0("V", 1:nSim))
    MeanM1 <- M1/Size
    Results1 <- list(M1, MeanM1)
    return(Results1)
}

次に、 in を使用simplify = FALSEして、このように呼び出しますreplicate()。これにより、要素ごとに 2 つの配列のリストを持つ長さ 2 のリストが生成されます。

replicate(2, MyFun(nSim=5, Size=2, Prob=c(0.2, 0.4)), simplify = FALSE)

[[1]]
[[1]][[1]]
    V1 V2 V3 V4 V5
0.2  1  0  2  0  0
0.4  2  0  1  1  0

[[1]][[2]]
     V1 V2  V3  V4 V5
0.2 0.5  0 1.0 0.0  0
0.4 1.0  0 0.5 0.5  0


[[2]]
[[2]][[1]]
    V1 V2 V3 V4 V5
0.2  0  0  0  0  1
0.4  2  1  1  1  0

[[2]][[2]]
    V1  V2  V3  V4  V5
0.2  0 0.0 0.0 0.0 0.5
0.4  1 0.5 0.5 0.5 0.0
于 2015-08-02T17:53:43.317 に答える