reshape2::melt
私はかなり非標準的な方法で を長年使用してきました。数値実験を実行して、結果として行列を取得しています。次に、それを溶かしていくつかの画像を作成します。
との類似性に触発されて、クラス マトリックスのオブジェクトで同一の出力を達成しようとしています。これまでのところ運が悪い:reshape2
tidyr
library(reshape2)
library(tidyr)
set.seed(42)
mat <- matrix(runif(6), 3)
mat2 <- mat
colnames(mat2) <- letters[1:2]
rownames(mat2) <- letters[3:5]
melt(mat)
melt(mat2)
gather(mat) # fails
gather(mat2) # fails
それらが存在する場合melt
はスマートで保持されることに注意してください。dimnames
私はそれがどのように機能するかを学んだので、次の関数をメソッドディスパッチに追加できる可能性があります。
gather.matrix <- function(mat) {
if (is.null(dimnames(mat))) {
grid <- expand.grid(seq.int(nrow(mat)), seq.int(ncol(mat)))
} else {
grid <- expand.grid(dimnames(mat))
}
cbind(grid, value = as.vector(mat))
}
all.equal(melt(mat),
gather.matrix(mat))
#[1] TRUE
all.equal(melt(mat2),
gather.matrix(mat2))
#[1] TRUE
しかし問題は、私の場合gather
と同じように行動を強制できるかどうかです。melt
と で目的の出力を生成するパラメータの組み合わせはありますmat
かmat2
?