2011-12-09 21 views
10

Mam skrypt R, który uruchamia zestaw funkcji na wielu zestawach danych i tworzy zestaw modeli koncentracji odpowiedzi. To, co chciałbym zrobić, to zapisać parametry modelu i inne wyniki w pliku csv.Utwórz pusty plik CSV w R

Mój plan polega na tym, aby skrypt utworzył pusty plik csv, a następnie w miarę postępu skryptu wyniki są dołączane do tego pliku csv. Za każdym razem, gdy skrypt jest uruchamiany, chciałbym, aby wyniki zostały nadpisane.

Próbowałem utworzyć pusty plik, używając

system("copy /y NUL results.csv > NUL") 

aby utworzyć plik, ale plik nie jest tworzony. To polecenie (tj. copy/y NUL results.csv > NUL) działa poprawnie, gdy działa bezpośrednio w terminalu Windows.

Czy brakuje mi czegoś prostego? System to Windows XP.

Dzięki!

Odpowiedz

17

Czy jest coś nie tak z file.create(), które jest przenośne w różnych systemach operacyjnych?

file.create("my.csv") 
# [1] TRUE 

Następnie można dołączyć do pliku, np. używając append=TRUE argument write.table(), może tak:

df <- data.frame(a=1:4, b=4:1) 
write.table(df, file="my.csv", sep=",", row.names=FALSE, append=TRUE) 
write.table(df, file="my.csv", sep=",", row.names=FALSE, 
      col.names=FALSE, append=TRUE) 

EDIT Jeśli będziesz robił mnóstwo zapisów do każdego pliku, może to zaoszczędzić sporo czasu, aby otworzyć połączenie do pliku raz, i tylko zamknij, gdy skończysz. Jeśli tak nie jest, powyższe podejście działa dobrze.

+4

Wypróbuj także 'apropos (" file \\. ")' to zobacz niektóre inne możliwości manipulacji plikami dostępne w bazie R. –

+0

Działa, ale otrzymuję to: 'In write.table (df, file =" my.csv ", sep =", ", row.names = FALSE ,: dołączanie nazw kolumn do pliku' – Aerox

0

jak o tylko

echo > results.csv 
+0

Otrzymuję podobne wyniki, używając 'echo> results.csv'. Myślę, że problem jest związany z wywołaniem systemowym, a nie z rzeczywistym uruchomieniem polecenia, ponieważ każde polecenie do stdout (np. "System (" echo Hello! ")' Nie generuje żadnego wyjścia. – sinclairjesse

4

Ponieważ jest to polecenie powłoki, powinieneś użyć powłoki zamiast systemu.

shell("copy /y NUL results.csv > NUL") 

EDYCJA. Bardziej przenośne rozwiązanie:

cat(NULL,file="results.csv") 
+2

To nie jest przenośne w systemie operacyjnym, więc zabiera jeden z ukrytych skarbów R. –

+0

Dobry punkt Dirk, W świetle tego przyjmuję odpowiedź Josha – sinclairjesse

+0

System to Windows XP! –