2014-06-24 9 views
5

glaube, ich habe eine Datei "data.txt", der mit dem folgenden Code erstellt werden könneneine gedruckte Nachricht in eine Zeichenvektor

m <- matrix(c(13, 14, 4950, 20, 50, 4949, 22, 98, 4948, 
       30, 58, 4947, 43, 48, 4946), 5, byrow = TRUE) 
write.table(m, "data.txt", row.names = FALSE, col.names = FALSE) 

die Datei in R mit scan Lesen, wird eine Nachricht zusammen mit den Daten geliefert.

(s <- scan("data.txt")) 
# Read 15 items 
# [1] 13 14 4950 20 50 4949 22 98 4948 
# [10] 30 58 4947 43 48 4946 

Ich möchte die Nachricht Read 15 items als ein Zeichen Vektor abzurufen. Ich weiß, dass ich die letzte aufgezeichnete Warnung erhalten kann, indem ich last.warning eintippe, und kann es in einen Zeichenvektor mit names(last.warning) umwandeln, aber es gibt kein solches Objekt wie last.message.

Gibt es eine Möglichkeit, eine ausgegebene Nachricht in einen Zeichenvektor umzuwandeln? Das gewünschte Ergebnis wäre

[1] "Read 15 items" 
+0

Was danach mit der Verwendung von 'length' falsch? – Dason

+0

Meine Schuld, ich habe die Frage bearbeitet. Ich würde gerne im Allgemeinen wissen, wie man Nachrichten in Zeichenvektoren verwandelt –

+0

@RichardScriven Wie Sie wahrscheinlich wissen, würde 'capture.output' oder' sink' normalerweise den Trick machen. Ich verstehe nicht ganz, warum sie hier nicht arbeiten. –

Antwort

6

Die Standardkurve für das Ergebnis zu message()stderr über cat() sendet. Sie können erfassen, dass mit

tc <- textConnection("messages","w") 
sink(tc, type="message") 
s <- scan("data.txt") 
sink(NULL, type="message") 
close(tc) 

messages 
# [1] "Read 5 items" 
1

Es gibt eine bequeme Wrapper für sink in utils::capture.output()

z<-capture.output(s<-scan("data.txt"), type="message") 
z 
#> [1] "Read 15 items" 
Verwandte Themen