ton*_*nov 10 r matrix reshape2 tidyr
我一直是一个reshape2::melt非常不标准的用户:我正在进行数值实验并得到一个矩阵.然后我融化它并产生一些图像.
受到和之间相似性的启发,我现在正试图在类矩阵的对象上实现相同的输出.到目前为止没有运气:reshape2tidyr
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
Run Code Online (Sandbox Code Playgroud)
请注意,它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
Run Code Online (Sandbox Code Playgroud)
但问题是,我能否gather以与melt我案件相同的方式强行行事?是否有将产生所需的输出参数的任意组合mat和mat2?
A5C*_*2T1 12
也许会出现更好的答案,但在此期间,我会将我的评论转换为答案:
引用自述文件到"tidyr":
请注意,tidyr旨在与dplyr一起使用,因此您应始终加载它们.
......从README到"dplyr":
dplyr是plyr的下一个迭代,专注于处理数据框的工具(因此
d在名称中).
因此,它有点有意义的不具备矩阵的方法.
既然gather已经包装了melt,如果你真的想要一个matrix方法,你可以节省自己编写一个自定义函数,并做一些像:
gather.matrix <- reshape2:::melt.matrix
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2443 次 |
| 最近记录: |