【问题标题】:Different spacing while printing to log打印到日志时的不同间距
【发布时间】:2016-09-04 02:11:05
【问题描述】:

我正在使用写入命令将 xgBoost 的重要性矩阵打印到日志中(写入适用于文件连接并将其定向到 stderr 好)。这是我正在使用的命令:

importance_matrix <- xgb.importance(names, model=bst)
write("The top 30 variables are:",stderr())
write(paste0("Feature",'\t','\t','Gain','\t','Cover','\t','Frequency'),stderr())
write(t(as.matrix(importance_matrix[1:30,])),sep="\t",ncolumns = length(names(importance_matrix)),stderr())

输出格式:

Feature         Gain    Cover   Frequency
pctTillDate 0.560359696 0.1314074664    0.024278250
colr_per    0.183149483 0.0962457545    0.049618673
date    0.050528297 0.1143752021    0.066395735
GREG_D  0.025648433 0.0381476142    0.018070143
LNGTD_I 0.020346020 0.0485235001    0.101322109
LATTD_I 0.019241497 0.0421892270    0.093867103

这使它看起来有点笨拙(在日志中比在 SO 中出现的笨拙得多)。因此,为了使它更好看,我想更改 t(as.matrix(importance_matrix[1:30,])),sep="\t" 的最后一行,这样第一个 sep 将是 2 个制表符('\t'、'\t'),其余为单个制表符('\t');而不是当前的均匀间距。简单但搜索没有给出任何想法。有什么建议吗?

【问题讨论】:

  • 制表符分隔的文件由于单元格中内容的长度而看起来像锯齿状输出,但请放心,列之间有等量的制表符。请注意:文本文件只是用于数据迁移或存档的转储输出,因此不打算展示。
  • @Parfait 我同意它不是为了演示,但在我的情况下,我正在做 400 多个映射器,只有 hadoop 流,后来想将所有 YARN 日志合并到一个日志中。然后我想保留重要参数的可读性。否则 400 多条日志本身很难通过,它们的笨拙只会增加分析器的痛苦。

标签: r dataframe


【解决方案1】:

考虑用空格填充矩阵的列名和第一个字符列,以使每个与第一列的最大字符大小对齐:

write.table(importance_matrix, sep="\t", row.names = FALSE,  quote = FALSE)
# Feature   Gain    Cover   Frequency
# pctTillDate   0.56035970  0.13140747  0.02427825
# colr_per  0.18314948  0.09624575  0.04961867
# date  0.05052830  0.11437520  0.06639573
# GREG_D    0.02564843  0.03814761  0.01807014
# LNGTD_I   0.02034602  0.04852350  0.10132211
# LATTD_I   0.01924150  0.04218923  0.09386710

new_matrix <- importance_matrix

# FIRST COLUMN LARGEST CHAR LENGTH
charmax <- max(nchar(new_matrix[,1]))

# PAD COLUMN HEADERS
colnames(new_matrix) <- lapply(1:ncol(new_matrix), function(i)
       paste0(colnames(new_matrix)[i],
              paste(rep(" ", charmax - nchar(colnames(new_matrix)[i])), collapse=""))
)

# PAD FIRST COLUMN
new_matrix[,1] <- sapply(1:nrow(new_matrix), function(i)
       paste0(new_matrix[i,1], 
              paste(rep(" ", charmax - nchar(new_matrix[i,1])), collapse=""))
)

write.table(new_matrix, sep="\t", row.names = FALSE,  quote = FALSE)
# Feature       Gain        Cover       Frequency  
# pctTillDate   0.56035970  0.13140747  0.02427825
# colr_per      0.18314948  0.09624575  0.04961867
# date          0.05052830  0.11437520  0.06639573
# GREG_D        0.02564843  0.03814761  0.01807014
# LNGTD_I       0.02034602  0.04852350  0.10132211
# LATTD_I       0.01924150  0.04218923  0.09386710

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-07
    • 2015-07-08
    • 2021-12-09
    • 2016-03-10
    • 2020-03-17
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多