2016-09-03 4 views
1

Ich drucke Wichtigkeitsmatrix von xgBoost in Protokoll mit Schreibbefehl (schreibt mit Dateiverbindung und richtet es auf stderr gut). Hier ist der Befehl, den ich verwende:Unterschiedlicher Abstand beim Drucken zum Protokollieren

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()) 

Ausgabe kommt im Format:

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 

, die es ein bisschen ungeschickt aussehen (viel ungeschickt in log, als hier in SO erscheinen). Um es besser aussehen zu lassen, möchte ich die letzte Zeile von t(as.matrix(importance_matrix[1:30,])),sep="\t" so ändern, dass zuerst sep 2 Tabs ('\ t', '\ t') und Rest einzelner Tab ('\ t') sind; anstelle des aktuellen einheitlichen Abstandes. Einfach, aber die Suche gibt keine Ahnung. Irgendwelche Vorschläge?

+0

Tab begrenzt werden, daß gezackter Ausgang aussehen aufgrund der Länge des Inhalts in Zelle, aber sicher sein, die gleiche Anzahl von Tabs sind zwischen den Spalten. Beachten Sie: Textdateien sind einfach Dump-Ausgaben, die für die Datenmigration oder -archivierung verwendet werden, so dass die Präsentation nicht beabsichtigt ist. – Parfait

+0

@Parfait Ich stimme zu, es ist nicht zur Präsentation gedacht, aber in meinem Fall mache ich 400+ Mapper nur Hadoop-Streaming und später wollen alle YARN-Protokolle in einem Protokoll zu kombinieren. Dann möchte ich die Lesbarkeit des wichtigen Parameters beibehalten. Oder aber 400+ Logs selbst sind schwer durchzukommen, weil sie ungeschickt sind, werden sie die Agonie des Analytikers noch verstärken. – abhiieor

Antwort

2

Betrachten sie die Spaltennamen und erste char Spalte der Matrix mit Leerzeichen Klotzen jeweils größter Zeichengröße der ersten Spalte auszurichten:

Dateien
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 
Verwandte Themen