vector
、matrix
、または次のいずれかの引数を受け入れる関数を作成しようとしています。 a data.frame
。ベクトル、行列、またはdata.frameを引数として受け入れる関数でapplyを使用する
set.seed(101)
MyT <- seq(0, 1, 0.1)
S <- sample(seq(0, 1, 0.01), 15, replace = T)
L1 <- sample(c(0,1), 15, replace = T)
L2 <- sample(c(0,1), 15, replace = T)
M1 <- as.matrix(L1)
M2 <- as.matrix(L1, L2)
D1 <- data.frame(L1)
D2 <- data.frame(L1, L2)
私はmyArg
と呼ぶことにします引数としてL1
(またはL2
)、M1
、M2
、D1
、またはD2
を受け入れるのに十分総称である関数を記述したいと思います。関数の中で、私は次のようなことをしたい:
sapply(MyT, function(t) { apply(D2[S > t, ], 2, sum) })
上記の行はうまくいきます。 myArg
がL1
かL2
であれば、例えば、
sapply(MyT, function(t) { apply(myArg[S > t, ], 2, sum) })
しかし、このコードは失敗します:問題は、私は同じように、それは一般的な作成する必要があるということです。この特定のケースでは、ベクトルを不法にサブセット化しようとしているため、エラーメッセージはincorrect number of dimensions
となります。サブセットの問題を修正すると、をベクターに使用できないため、dim(X) must have a positive length
の問題が発生します。などなど...
だから、私は次の操作を行いますしようとしているに上陸しました:
sapply(MyT, function(t) {
if (length(dim(myArg)) == 0) sum(myArg[S > t]) # for vector
else if (dim(myArg)[2] == 1) sum(myArg[S > t, ]) # for single-column matrix or data.frame
else sapply(myArg[S > t, ], 2, sum) # for multi-column matrix or data.frame
})
が、私はこれが動作するように期待が、私は使用したとき、私はまだ
Error in apply(myArg[S > t, ], 2, sum) : dim(X) must have a positive length
を取得しています
M2
を
myArg
とする。
dim(M2)
が[1] 15 2
であるため、私は混乱しています。誰もが、私はRは、オブジェクトフレームワークを持っているM2
myArg
私は 'is.vector'、' is.matrix'、 'is.data.frame'を使ってテストします。同様に配列を考慮する必要があるかもしれません。関数を別々のメソッドにすることもできます。これはおそらく正しい方法です。 – alistaire