2014-06-24 8 views
5

Załóżmy, że mam plik "data.txt", które mogą być tworzone za pomocą następującego koduKonwersja drukowany wiadomość do wektora znaków

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) 

odczytu pliku na R z scan, komunikat jest dostarczany wraz z danymi.

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

Chciałbym pobrać wiadomość Read 15 items jako wektor znaków. Wiem, że mogę uzyskać ostatnie nagrane ostrzeżenie, wpisując last.warning, i można przekształcić je w wektor znaków z names(last.warning), ale nie ma takiego obiektu, jak last.message.

Czy istnieje sposób konwertowania komunikatu wyjściowego na wektor znaków? Pożądany wynik byłby

[1] "Read 15 items" 
+0

Co jest nie tak z użyciem 'length' potem? – Dason

+0

Moja wina, zredagowałem pytanie. Chciałbym ogólnie wiedzieć, jak przekształcać wiadomości w wektory znaków. –

+0

@RichardScriven Jak pewnie wiesz, 'capture.output' lub' sink' zwykle robią lewę. Nie do końca rozumiem, dlaczego nie pracują tutaj. –

Odpowiedz

6

Domyślna zakręt za message() wysyła wynik do stderr poprzez cat(). Można uchwycić, że z

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

messages 
# [1] "Read 5 items" 
1

Jest wygodny wrapper dla sink w utils::capture.output()

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