4

ここに投稿したマトリックス構造で以下が機能しない理由を知りたいです(dputコマンドを使用しました)。

実行してみると:

apply(mymatrix, 2, sum)

私は得る:

Error in FUN(newX[, i], ...) : invalid 'type' (list) of argument

ただし、それがマトリックスであることを確認すると、次のようになります。

is.matrix(mymatrix)

[1] TRUE

データを一時変数にリスト解除してから行列を再作成することでこの問題を回避できることに気付きましたが、なぜこれが発生しているのか興味があります。

4

2 に答える 2

5

?is.matrix言う:

'is.matrix'は、'x'がベクトルであり、長さ2)の'"dim"'属性を持つ場合は'TRUE'を返し、それ以外の場合は'FALSE'を返します。

オブジェクトは、dim属性を持つリストです。リストはベクトルの一種であるため(ほとんどの人がベクトルと考える原子型ではありませんが)、をis.matrix返しますTRUE。例えば:

> l <- as.list(1:10)
> dim(l) <- c(10,1)
> is.matrix(l)
[1] TRUE

アトミックマトリックスに変換するmymatrixには、次のようなことを行う必要があります。

mymatrix2 <- unlist(mymatrix, use.names=FALSE)
dim(mymatrix2) <- dim(mymatrix)
# now your apply call will work
apply(mymatrix2, 2, sum)
# but you should really use (if you're really just summing columns)
colSums(mymatrix2)
于 2012-09-18T17:35:59.653 に答える
5

マトリックスの要素はそうではなくnumeric、代わりにlist、これを確認するために次のことができます。

apply(m,2, class) # here m is your matrix

したがって、列の合計が必要な場合は、それらを「強制」してからnumeric適用する必要があります。colSumsこれは、のショートカットです。apply(x, 2, sum)

colSums(apply(m, 2, as.numeric)) # this will give you the sum you want.
于 2012-09-18T17:40:43.173 に答える