R语言打印含特殊字符矩阵时去除引号问题求助
解决R语言中打印字符矩阵时引号的问题
我明白你遇到的困扰——创建了全是#的矩阵,但打印出来总是带引号,试了几种方法都没解决。别担心,这里有几个简单有效的解决方案:
方案1:直接修改print函数的quote参数(最简便)
R的print.matrix()函数默认会给字符元素加引号,只需要在打印时指定quote = FALSE就能去掉引号:
char <- c("#", "@") m <- matrix(paste(char[1]), nrow = 4, ncol = 4) print(m, quote = FALSE)
执行后输出就是你想要的:
[,1] [,2] [,3] [,4] [1,] # # # # [2,] # # # # [3,] # # # # [4,] # # # #
方案2:将矩阵转换为noquote类型
如果你想让矩阵本身默认打印不带引号,可以把它转换成noquote类对象,之后直接打印就不会有引号了:
char <- c("#", "@") m <- matrix(char[1], nrow = 4, ncol = 4) m_noquote <- noquote(m) print(m_noquote)
这个方法的本质是告诉R,这个对象的元素不需要用引号标识,打印时会自动去掉引号。
方案3:用cat()自定义打印格式
如果想要更灵活的排版(比如去掉列名/行名,或者调整元素间距),可以用cat()结合apply()来逐行打印:
char <- c("#", "@") m <- matrix(char[1], nrow = 4, ncol = 4) # 每行元素用空格分隔,打印后换行 apply(m, 1, function(row) cat(paste(row, collapse = " "), "\n"))
输出会更简洁:
# # # # # # # # # # # # # # # #
为什么之前的方法没生效?
你提到用noquote无效,大概率是直接写了print(noquote(m))?其实需要把noquote的结果赋值给一个对象,或者直接打印noquote(m)(注意R的打印机制对临时对象的处理),不过方案1的quote=FALSE是最直接的解决方式。
内容的提问来源于stack exchange,提问作者Rohith




