2017-07-26 2 views
1

nehme ich die FunktionR-Funktion mit Argumenten in 32-Bit-R Rennen, innen 64-Bit-R

test.function <- function(arg1){ 
        print(arg1) 
       } 

Wie kann ich laufen ausgeführt werden soll lässt, sagen:

test.function("Hello world") 

in 32-Bit-Modus , unter Verwendung von 64 Bit R? Ich habe es geschaffen

system(paste0(Sys.getenv("R_HOME"), "/bin/i386/Rscript.exe ",'"some_script.R"')) 

mit einem ganzen Skript in 32-Bit-Modus ausgeführt Aber wie kann ich das ändern, so dass es eine Funktion mit Argumenten ausführen kann, statt einem ganzen Skripts?

EDIT

die Antwort von Roman Luštrik Nach und

system('Rscript test.script.R "hello"') 

Laufen gibt mir die folgende Fehlermeldung:

Error in winDialog(type = "ok", message = message_text) : winDialog() cannot be used non-interactively call: -> check.for.updates.R -> winDialog Running stopped

Warning message: running command 'Rscript test.script.R "hello"' had status 1

(Die Fehlermeldung war in meiner Muttersprache, also musste ich um ein paar Wörter zu übersetzen, so dass der Text auf anderen Systemen leicht abweichen kann)

+0

Können Sie diese Zeile in Ihre Funktion einfügen? – AK47

+0

Könnte machbar sein, aber ich bin nicht weiter gekommen, als ganze Skripte laufen zu lassen, also weiß ich nicht, wie es gemacht werden sollte – Acarbalacar

+0

Ihr Edit scheint, als ob es eine neue Frage sein sollte. In jedem Fall verwenden Sie wahrscheinlich einige Funktionen, die nicht interaktiv verwendet werden sollen. –

Antwort

0

Ich habe selbst eine Lösung gefunden, indem ich Roman Luštrik Lösung geändert habe.

seinem Beispiel folgend wir das Skript haben test_script.R genannt: In

pathIn32BitRScript <- '"C:/Some path/test_script.R"' 
system(paste0(Sys.getenv("R_HOME"), "/bin/i386/Rscript.exe", pathIn32BitRScript, " ", "Hello world")) 
load("Data.Rda") # Loads the results into an object called mydata 
invisible(file.remove("Data.Rda")) # Deletes the file we created 

:

args <- commandArgs(trailingOnly = TRUE) 

test.function <- function(x) { 
    print(x) 
} 

args.run <- list(x = args) 
mydata <- do.call(test.function, args = args.run) 
save(mydata, file = "Data.Rda") # If you need the output to an R object 

dann in einem anderen Skript, das 64-Bit-R läuft, wir diese Funktion in 32-Bit-R durch laufen kann Dieses Beispiel haben wir x = "Hello World". Falls Sie Leerzeichen in Ihrem Pfad haben, benötigen Sie die doppelten Anführungszeichen wie in diesem Beispiel.

1

Sie können nur eine bestimmte Funktion nicht ausführen, Sie müssen ein Skript erstellen. Dies hindert Sie jedoch nicht daran, ein Skript mit nur einer Funktion zu erstellen.

Wenn Sie ein Skript mit dem Namen test.script.R erstellen und es irgendwo, wo Sie es finden können.

args <- commandArgs(trailingOnly = TRUE) 

str(args) 

test.function <- function(x) { 
    message("Your input:") 
    message(x) 
} 

invisible(sapply(args, test.function)) 

Öffnen Sie ein Terminalfenster. Sie können Windows 'cmd.exe verwenden (drücken Sie die Windows-Taste und geben Sie cmd.exe oder Command Prompt oder was auch immer Sie in Ihrer vielleicht lokalisierten Version des Systems haben). Navigieren Sie zu dem Ort, an dem sich das Skript befindet, und führen Sie es mit dem folgenden Befehl aus.

$ Rscript test.script.R "hello" "hello" "won't you tell me your name" "i hate the doors" 
chr [1:4] "hello" "hello" "won't you tell me your name" ... 
Your input: 
hello 
Your input: 
hello 
Your input: 
won't you tell me your name 
Your input: 
i hate the doors 

Oder könnten Sie system verwenden, um die gleiche Sache durch R.

system('Rscript test.script.R "hello" "hello" "won't you tell me your name" "i hate the doors"') 

Hinweis, wie ich einfache und doppelte Anführungszeichen verwenden zu tun. Anführungszeichen sind auf der Außenseite. Bei diesem Aufruf wird außerdem davon ausgegangen, dass sich das Skript in dem Arbeitsbereich befindet, in dem R gerade sucht. Sie können das jedoch mit setwd() ändern.

+0

Was genau machst du, wenn du dieses Skript ausführst? Ich muss vielleicht erwähnen, ich verwende Windows 10 auch – Acarbalacar

+0

@Acrobalacar Ausführung der eine Funktion, die Sie direkt ausführen möchten. Das Skript ist nur ein Wrapper darum, um Argumente abzufangen, eine mögliche Vorverarbeitung durchzuführen und dann Argumente an die Funktion zu übergeben. Das obige Skript wurde auf einem Windows-Rechner ausgeführt, allerdings über ein 'cygwin'-Terminal, das jetzt in RStudio eingebettet ist. –

+0

das ist eine völlig neue Welt für mich. Ich benutze Rstudio, aber ich habe keine Erfahrung mit Cygwin. Können Sie Ihre Antwort so bearbeiten, dass Sie eine Schritt-für-Schritt-Anleitung dafür bereitstellen oder einen Link zu einer Quelle bereitstellen, die eine solche Anleitung bereitstellt? – Acarbalacar