Różnica między Rscript i littler
...poza tym, że Rscript jest wywoływany przez #!/usr/bin/env Rscript
i littler z #!/usr/local/bin/r
(w moim systemie) w pierwszej linii pliku skryptu. Znalazłem pewne różnice w szybkości wykonania (wygląda na to, że littler jest nieco wolniejszy).
Stworzyłem dwa atrapy skryptów, uruchomiłem każdy 1000 razy i porównałem średni czas wykonania.
Oto plik Rscript:
#!/usr/bin/env Rscript
btime <- proc.time()
x <- rnorm(100)
print(x)
print(plot(x))
etime <- proc.time()
tm <- etime - btime
sink(file = "rscript.r.out", append = TRUE)
cat(paste(tm[1:3], collapse = ";"), "\n")
sink()
print(tm)
A oto mały plik:
#!/usr/local/bin/r
btime <- proc.time()
x <- rnorm(100)
print(x)
print(plot(x))
etime <- proc.time()
tm <- etime - btime
sink(file = "little.r.out", append = TRUE)
cat(paste(tm[1:3], collapse = ";"), "\n")
sink()
print(tm)
As you can widzisz, są one prawie identyczne (pierwszy argument linii i sink file różnią się). Wyjście to sink
ed do pliku tekstowego, stąd importowane w R z read.table
. Stworzyłem skrypt bash, aby wykonać każdy skrypt 1000 razy, a następnie obliczone średnie.
Oto skrypt Basha:
for i in `seq 1000`
do
./$1
echo "####################"
echo "Iteration #$i"
echo "####################"
done
A wyniki są następujące:
# littler script
> mean(lit)
user system elapsed
0.489327 0.035458 0.588647
> sapply(lit, median)
L1 L2 L3
0.490 0.036 0.609
# Rscript
> mean(rsc)
user system elapsed
0.219334 0.008042 0.274017
> sapply(rsc, median)
R1 R2 R3
0.220 0.007 0.258
W skrócie: poza (oczywistą) różnicą czasu wykonania, czy jest jakaś inna różnica? Ważniejsze pytanie brzmi: dlaczego powinieneś / nie powinieneś woleć littler nad Rscript (lub odwrotnie)?
1 answers
Kilka szybkich komentarzy:
Ścieżka {[2] } jest dowolna, możesz użyć
/usr/bin/env r
tak samo jak w niektórych przykładach. Z tego co pamiętam, ogranicza to, jakie inne argumenty możesz podaćr
, ponieważ wymaga tylko jednego wywołania przezenv
Nie rozumiem twojego punktu odniesienia i dlaczego to robisz w ten sposób. Mamy porównania czasowe w źródłach, zobacz
tests/timing.sh
itests/timing2.sh
. Może chcesz podzielić test na Start i tworzenie wykresów lub cokolwiek innego jesteś po.Za każdym razem, gdy przeprowadzaliśmy te testy, littler wygrywał. (Nadal wygrał, gdy ponownie uruchomiłem je teraz.), Co miało dla nas sens, ponieważ jeśli spojrzymy na źródła
Rscript.exe
, działa to inaczej, ustawiając środowisko i ciąg poleceń przed wywołaniemexecv(cmd, av)
. littler może zacząć trochę szybciej.Główną ceną jest przenośność. Sposób, w jaki littler jest zbudowany, nie dotrze do Windows. A przynajmniej nie łatwo. Otoh mamy RInside ported więc jeśli ktoś naprawdę chciał...
Littler pojawił się pierwszy we wrześniu 2006 roku w porównaniu z Rscript, który pojawił się z R 2.5.0 w kwietniu 2007 roku.
Rscript jest teraz wszędzie tam, gdzie jest R. To duża zaleta.
Opcje wiersza poleceń są moim zdaniem trochę bardziej sensowne dla littlera.
Oba działają z pakietami Cran getopt i optparse do parsowania opcji.
Zastrzeżenie: littler jest jednym z moich projektów.
Postscriptum : napisałbym test jako
Napisałbym to jako
fun <- function { X <- rnorm(100); print(x); print(plot(x)) }
replicate(N, system.time( fun )["elapsed"])
Lub nawet
mean( replicate(N, system.time(fun)["elapsed"]), trim=0.05)
Aby pozbyć się odstających. Co więcej, zasadniczo mierzysz tylko I/O (druk, i działki), które obie dostaną się z biblioteki R, więc spodziewałbym się małej różnicy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-01 20:15:01