2013-05-08 16 views
6

Mam pewne zmienne, które lm w R są automatycznie opakowywane za pomocą backticks/back quotes, np. zmienne, które mają dwukropki w nazwach.Usuwanie wycofań w wyjściu R

Po pewnym przetwarzaniu próbuję zapisać zmienne i współczynniki modelu liniowego z write.table. Niestety, są również wypisywane backticks.

Jak mogę zapobiec zapisywaniu tych skrótów?

podać prosty ale nierealistyczny przykład:

d <- data.frame(`1`=runif(10), y=runif(10), check.names=F) 
l <- lm(y ~ `1`, d) 
write.table(data.frame(l$coefficients), file="lm.coeffs", quote=F, sep="\t", col.names=F) 

Plik lm.coeffs będzie - dość oczywisty - posiada `1` w pierwszej kolumnie wyjściu zamiast 1. Poza postprocessingiem w jakimś innym skrypcie, w jaki sposób mogę usunąć backticks z wyjścia?

Odpowiedz

9

Możesz to zrobić post-processing w R. Zamiast pliku, przechowuj dane wyjściowe w zmiennej przy użyciu capture.output. Usuń wycofania za pomocą gsub. Wreszcie, należy wydrukować dane wyjściowe do pliku przy użyciu cat:

report <- capture.output(write.table(data.frame(l$coefficients), 
         quote = FALSE, sep = "\t", col.names = FALSE)) 

cat(gsub("`", "", report), sep = "\n", file = "lm.coeffs") 
+0

+1 Nigdy nie myślał o tym, co 'write.table' zwraca niewidoczny! – mnel