如何在显示矩阵时删除字符串值中的引号?

How to remove quotes in string values in displaying a matrix?

可重现示例:

adfcstable <- function(d, max = 5) {
d <- as.data.frame(d)
LevelADFtable <- matrix(, nrow = dim(d)[[2]]*3, ncol = 9) #18x9
FirstDiffADFtable <- matrix(, nrow = dim(d)[[2]]*3, ncol = 8)  #18x8
Result <- matrix(, nrow = dim(d)[[2]]*3, ncol = 1)   # 18x1
ADFtable <- cbind(LevelADFtable, FirstDiffADFtable, Result) # 18 x 18
colnames(ADFtable) <- c("var","type","levelt","Pc","c","Pt","t","prob","omlo","type","1stDifft","Pc","c","Pt","t","prob","omlo","result")

for (i in as.integer(1:dim(d)[[2]])) {
 for (j in as.integer(1:3)) {
   ADFtable[3*(i-1) + j,1] <- colnames(d)[[i]]
   }
ADFtable[3*i-2,2] <- "dt"
ADFtable[3*i-2,10] <- "dt"
ADFtable[3*i-1,2] <- "d"
ADFtable[3*i-1,10] <- "d"
ADFtable[3*i,2] <- "-"
ADFtable[3*i,10] <- "-"
}
ADFtable
}

repexa <- as.data.frame(matrix(c(rnorm(10), rnorm(10), rnorm(10), rnorm(10), rnorm(10), rnorm(10)),ncol=6),stringsAsFactors = FALSE)
adfcstable(repexa)
#      var  type levelt Pc c  Pt t  prob omlo type 1stDifft Pc c  Pt t  prob
# [1,] "V1" "dt" NA     NA NA NA NA NA   NA   "dt" NA       NA NA NA NA NA  
# [2,] "V1" "d"  NA     NA NA NA NA NA   NA   "d"  NA       NA NA NA NA NA 

在 var 和 type 列中,有引号内的值。我希望数据框中的字符串值不带引号。

我做了什么来解决这个问题:

我在SOF中分析过类似的问题:

assigning a string to an object without double quotes
Remove quotes from a character vector in R
R: How to remove quotation marks in a vector of strings, but maintain vector format as to call each individual value?

但是,它们在我的示例中不起作用:我在尝试这些技巧时遇到以下错误:
1. # 在代码中,我改成这样(但没用):
ADFtable[3*i-2,2] <- noquote("dt")

2. # 在代码中,我改成这样(但没用):
# ADFtable[3*i-2,2] <- c("dt")

3. # 在代码中,我改成这样(但报错): # ADFtable[3*i-2,2] <- paste0("\n", "dt", "\n") adfcstable(repexa) ADFtable[3 * i - 2, 2] <- cat(c("dt"), "\n") 中的错误: 要替换的项目数不是替换长度的倍数

# I analyzed the error:
cat(paste0("\n", "dt", "\n"))           # dt
length(cat(paste0("\n", "dt", "\n")))   # 0
# Find the reason: Assigning a 0-lengthed value to 1-lengthed one.

4. print(adfcstable(repexa), quote=FALSE) 工作了一点:但它在显示中将 "NA" 值更改为“< NA >”值数据框。

我要的是(在显示数据框作为函数的返回值):

adfcstable(repexa)
#      var  type levelt Pc c  Pt t  prob omlo type 1stDifft Pc c  Pt t  prob
# [1,] V1 dt NA     NA NA NA NA NA   NA   dt NA       NA NA NA NA NA  
# [2,] V1 d  NA     NA NA NA NA NA   NA   d  NA       NA NA NA NA NA 

非常感谢任何帮助。

这应该适用于该矩阵对象。查看打印页面:

print(adfcstable(repexa), quote=FALSE, na.print="NA")

我最初认为您有一个因子列,如果是这样的话,那么这个建议可能会有所帮助。: 如果您希望 NA 不显示为 "<NA>"(打印在因子向量中显示 NA 值的方式),那么您必须防止 data.frame 方法创建因子。这可以通过

在全球范围内完成
options('stringsAsFactors'=FALSE)

或者您可以在对 read.table 及其表兄弟的每次调用以及所有 data.frame 调用中放置该参数。

(由 docendo discimus 解决)

为了使用 docendo 的技巧,我在代码中添加了 "ADFtable <- as.data.frame(ADFtable)" 行:

ADFtable <- cbind(LevelADFtable, FirstDiffADFtable, Result) # 18 x 18
ADFtable <- as.data.frame(ADFtable)

结果是没有引号。非常感谢,docendo。