Chcę przekierować cały tekst konsoli do pliku. Oto, czego próbowałem:
> sink("test.log", type=c("output", "message"))
> a <- "a"
> a
> How come I do not see this in log
Error: unexpected symbol in "How come"
Oto, co otrzymałem w test.log:
[1] "a"
Oto, czego chcę w test.log:
> a <- "a"
> a
[1] "a"
> How come I do not see this in log
Error: unexpected symbol in "How come"
Co ja robię źle? Dzięki!
Odpowiedzi:
Musisz osobno ujrzeć „wyjście” i „wiadomość” (
sink
funkcja patrzy tylko na pierwszy elementtype
)Teraz, jeśli chcesz, aby dane wejściowe były również rejestrowane, umieść je w skrypcie:
script.R
1:5 + 1:3 # prints and gives a warning stop("foo") # an error
I po monicie:
con <- file("test.log") sink(con, append=TRUE) sink(con, append=TRUE, type="message") # This will echo all input and not truncate 150+ character lines... source("script.R", echo=TRUE, max.deparse.length=10000) # Restore output to console sink() sink(type="message") # And look at the log... cat(readLines("test.log"), sep="\n")
źródło
1:5 + 1:3
, A następnie jej wyjście, a następnie następną itd. Powodem, dla którego chcę tworzyć tego typu dzienniki, jest to, że mam program, który do uruchomienia zajmuje ponad 30 GB pamięci RAM. Uruchamiam go w chmurze amazon i zapisuję dane wyjściowe z regresji do pojedynczych plików. Chcę móc szybko znaleźć kod, który utworzył każdy plik, patrząc na dziennik. Uwaga: jeśli po prostu wycinam i wklejam dane wyjściowe konsoli, to wszystko.max.deparse.length
argumentu. Zaktualizowałem odpowiedź.Jeśli masz dostęp do wiersza poleceń, możesz preferować uruchomienie skryptu z wiersza poleceń za pomocą R CMD BATCH.
== rozpocznij zawartość skryptu.R ==
a <- "a" a How come I do not see this in log
== koniec treści skryptu.R ==
W wierszu polecenia („$” w wielu wariantach un * x, „C:>” w systemie Windows) uruchom
Końcowy znak „&” jest opcjonalny i uruchamia polecenie w tle. Domyślna nazwa pliku dziennika ma „out” dołączony do rozszerzenia, tj. Script.Rout
== rozpocznij zawartość script.Rout ==
R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: i686-pc-linux-gnu (32-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. [Previously saved workspace restored] > a <- "a" > a [1] "a" > How come I do not see this in log Error: unexpected symbol in "How come" Execution halted
== koniec zawartości script.Rout ==
źródło
R CMD BATCH script.R &
nie działa.Nie możesz. Co najwyżej możesz zapisać dane wyjściowe za pomocą
sink
i wejściesavehistory
osobno. Lub użyć zewnętrznego narzędzia podobnegoscript
,screen
albotmux
.źródło
Uruchom R w emacsie z ESS (statystyki mówienia Emacsa) r-mode. Mam otwarte jedno okno ze skryptem i kodem R. Inny ma uruchomiony R. Kod jest wysyłany z okna składni i oceniany. Polecenia, dane wyjściowe, błędy i ostrzeżenia pojawiają się w uruchomionej sesji okna R. Pod koniec pewnego okresu pracy zapisuję wszystkie dane wyjściowe do pliku. Mój własny system nazewnictwa to * .R dla skryptów i * .Rout dla zapisywania plików wyjściowych. Oto zrzut ekranu z przykładem.
źródło
Jeśli jesteś w stanie używać powłoki bash, możesz po prostu rozważyć uruchomienie kodu R z poziomu skryptu bash i przesłanie strumieni stdout i stderr do pliku. Oto przykład użycia heredoc:
Plik:
test.sh
#!/bin/bash # this is a bash script echo "Hello World, this is bash" test1=$(echo "This is a test") echo "Here is some R code:" Rscript --slave --no-save --no-restore - "$test1" <<EOF ## R code cat("\nHello World, this is R\n") args <- commandArgs(TRUE) bash_message<-args[1] cat("\nThis is a message from bash:\n") cat("\n",paste0(bash_message),"\n") EOF # end of script
Następnie po uruchomieniu skryptu z stderr i stdout przesłanymi potokiem do pliku dziennika:
Innymi rzeczami, na które warto zwrócić uwagę, byłoby po prostu umieszczenie stdout i stderr bezpośrednio z R heredoc do pliku dziennika; Jeszcze tego nie próbowałem, ale prawdopodobnie też zadziała.
źródło
Aby zapisać tekst z konsoli: uruchom analizę, a następnie wybierz (Windows) „Plik> Zapisz do pliku”.
źródło
Ustaw preferencje Rgui dla dużej liczby wierszy, a następnie oznacz czas i zapisuj jako plik w odpowiednich odstępach czasu.
źródło
Możesz drukować do pliku i jednocześnie obserwować postępy (lub nie)
screen
podczas uruchamiania skryptu R.Kiedy nie używasz ekranu, użyj
R CMD BATCH yourscript.R &
i kroku 4.Podczas korzystania z ekranu w terminalu, ekran startowy
uruchom skrypt R.
Przejdź do innego ekranu, naciskając CtrlA, a następniec
spójrz na swoje dane wyjściowe za pomocą (w czasie rzeczywistym):
Przełączać się między ekranami z CtrlAczymn
źródło
Jeśli chcesz, aby komunikaty o błędach zostały zapisane w pliku
zz <- file("Errors.txt", open="wt") sink(zz, type="message")
wynik będzie następujący:
Error in print(errr) : object 'errr' not found Execution halted
Te dane wyjściowe zostaną zapisane w pliku o nazwie Errors.txt
W przypadku, gdy chcesz wydrukować wartości konsoli do pliku , możesz użyć argumentu 'split':
zz <- file("console.txt", open="wt") sink(zz, split=TRUE) print("cool") print(errr)
wynik będzie:
[1] "cool"
w pliku console.txt. Zatem wszystkie dane wyjściowe konsoli zostaną wydrukowane w pliku o nazwie console.txt
źródło