2016-10-13 2 views
0

Ich mag eine .R Datei schreiben, oder ein R script von R console erstellen, wie wir .txt Dateien erstellen. Aber normalerweise, wenn wir .txt Dateien schreiben, enthalten sie etwas output und nicht commands dazu. Also möchte ich R script von console und save mit R-Befehlen schreiben.Schreiben .R-Datei von R-Konsole ohne R zu verwenden oder mit einem beliebigen Editor unter Verwendung von R-Befehlen

Ich bin mir nicht sicher, ob R write.R so etwas hat. Ich habe versucht, mit sink() Befehl, aber wieder es outputs the output and not commands.

sink("Rscriptfrom_Console.R") 
sapply(iris,class) 
sink() 

Erstellen einer R script file (.R) from R console using R commands.

Jede Hilfe wird sehr geschätzt. Danke!

+0

Sie eine Datei erstellen könnte und es dann von R-Konsole bearbeiten, indem Sie: 'File.Create ('foo.R') file.edit ('foo.R') '. –

+0

Ich habe gerade versucht mit 'writeLines()' und 'file()', es scheint, es funktioniert. Lass mich nachsehen, indem ich weitere Befehle hinzufüge und es beschaffe. –

+0

Hier ist ein kleines Beispiel. mit 'writelines: fileConn <-datei (" foo.R "); writeLines (einfügen (" sapply ("," iris, "," class) ", fileConn); schließen (fileConn); source ('foo.R ') ' –

Antwort

1

Beantworten meiner eigenen Frage. Posten Sie, wenn Sie besser antworten. Verwenden Sie hier file() und writeLines() Funktion und source() um zu überprüfen, ob die geschriebene .R Datei funktioniert.

fc <- file("out.R") 

    writeLines(c("print(head(iris))", 
    "print(summary(iris))"), 
    fc) 

    close(fc) 

    source("out.R") 
    # Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
    # 1   5.1   3.5   1.4   0.2 setosa 
    # 2   4.9   3.0   1.4   0.2 setosa 
    # 3   4.7   3.2   1.3   0.2 setosa 
    # 4   4.6   3.1   1.5   0.2 setosa 
    # 5   5.0   3.6   1.4   0.2 setosa 
    # 6   5.4   3.9   1.7   0.4 setosa 

    # Sepal.Length Sepal.Width  Petal.Length Petal.Width 
    # Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 
    # 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 
    # Median :5.800 Median :3.000 Median :4.350 Median :1.300 
    # Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 
    # 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 
    # Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 

    #  Species 
    # setosa :50 
    # versicolor:50 
    # virginica :50 
+0

Ich empfehle, dass Sie nicht 'file' ...' close' hier verwenden: den Dateinamen direkt verwenden (siehe meine Antwort) ist viel einfacher. Die Verwendung von 'close' und ähnlichen Funktionen ist im Allgemeinen fehleranfällig: Wenn vor dem' close'-Aufruf ein Fehler auftritt, wird die Ausführung gestoppt und 'close' wird nie aufgerufen. Um dies zu minimieren, sollten Sie * immer * in einem solchen Fall ['on.exit'] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/on.exit.html) verwenden ein Szenario. In diesem Fall entferne 'close (fc)' und setze 'on.exit (close (fc))' direkt hinter deinem Aufruf von 'file'. –

+0

Danke für die Bereitstellung von Informationen zu diesem Thema. Gib mir etwas Zeit, um 'on.exit' zu überprüfen und dein Beispiel zu implementieren. Vielen Dank! –

0

Es scheint, Sie mißverstehen, was sink tut: es fängt die Ausgabe und schreibt sie in eine Datei. Es erfasst keine unbewerteten R-Ausdrücke, was Sie tun möchten.

Um einen nicht bewerteten R-Ausdruck zu erfassen, müssen Sie ihn in quote umbrechen oder einen ähnlichen Mechanismus verwenden. Um Ihr Beispiel zu verwenden:

quoted_expr = quote(sapply(iris, class)) 

Jetzt enthält quoted_expr den R-Ausdruck. Als nächstes müssen Sie sie in eine String-Darstellung des R-Code konvertieren:

code_representation = deparse(quoted_expr, backtick = TRUE) 

Die backtick = TRUE ist nicht unbedingt notwendig, hier aber es ist gute Praxis immer, es zu benutzen, weil es bestimmte Fälle, in denen es notwendig ist.

Schließlich können wir diesen Code-Darstellung in eine Datei schreiben:

writeLines(code_representation, 'code.r') 

nun das obige Beispiel schrieb einen festen R Ausdruck in eine Datei. Wir hätten genauso gut eine Zeichenkette verwenden können. Die Verwendung eines zitierten Ausdrucks anstelle der Zeichenkette gibt uns die Möglichkeit, den Code im laufenden Betrieb zu ändern, ohne sich mit der Zeichenkette herumärgern zu müssen (fehleranfällig und ineffizient). Zum Beispiel könnten wir den Benutzer entscheiden lassen, welche data.table arbeiten:

dataset_name = 'mtcars' # Modify to your heart’s content 
quoted_expr = substitute(sapply(dataset, class), 
         list(dataset = as.name(dataset_name))) 

# `quoted_expr` is now: 
sapply(mtcars, class) 

... etc.

Verwandte Themen