将矩阵从模式A转换为模式B.

Ant*_*zée 2 r matrix logical-operators r-factor

非常简单的问题,我想以一般的方式问,因为它似乎是一个经常出现的问题,我很乐意找到一种通用的方法来做到这一点.例如,问题是将逻辑矩阵转换为因子矩阵,但保持矩阵结构:行数和列数,列号,rownames.我想要更直接的东西

X2 <- matrix(as.mode(X), ncol=ncol(X)); 
rownames(X2) <- rownames(X) ...
Run Code Online (Sandbox Code Playgroud)

我已经在某些情况下找到了这个问题,所以我把它放在这里,但仍有一些问题......

A. into( - >)因素是我没有一个简单的方法.

B. 1.逻辑 - >数字:使用'+0'技巧

BoolMatrix <- matrix(c(TRUE,FALSE),nrow=3,ncol=2)
rownames(BoolMatrix) <- LETTERS[1:3]; colnames(BoolMatrix) <-LETTERS[11:12]
(NumMatrix <- BoolMatrix + 0)   
Run Code Online (Sandbox Code Playgroud)

B. 2.数字 - >逻辑:直接使用条件

NumMatrix <- matrix(1:6, ncol=2)
rownames(NumMatrix) <- LETTERS[1:3]; colnames(NumMatrix) <-LETTERS[11:12]
(BoolMatrix <- NumMatrix == 0) 
Run Code Online (Sandbox Code Playgroud)

C.数字< - >字符:不能比2个衬垫更好,直接改变模式工作(也可以在逻辑和数字之间工作,但上面的解决方案更优雅)

CharMatrix <- NumMatrix
mode(CharMatrix) <-"character"
print(CharMatrix)
Run Code Online (Sandbox Code Playgroud)

最后的解决方案("2班轮")实际上适用于与因素无关的任何事情,我遇到了困难......

任何的想法 ?:-)

Hon*_*Ooi 5

使用structure,将属性列表附加到任意对象.对于矩阵,您需要的属性是dim,也可以是dimnames.

例如转换X为因子矩阵:

m <- structure(factor(X), dim=dim(X), dimnames=dimnames(X))
Run Code Online (Sandbox Code Playgroud)