Смущает разница между запуском R из командного файла и запуском его непосредственно из оболочки - PullRequest
0 голосов
/ 13 ноября 2018

Недавно я столкнулся со странной ошибкой, и хотя мне удалось ее исправить, я не могу на всю жизнь выяснить, что происходит за кулисами, и я хотел бы понять, что происходит. В настоящее время я пишу программу, которая принимает входные данные Excel и использует их для направления программы, написанной на R, которая в конечном итоге выводит результаты, которые будут возвращаться в Excel для проверки пользователем.

В моем исходном решении использовался командный файл, состоящий из одной строки, который вызывал:

Rscript "Rfilepath.R" 

, который был вызван из VBA с использованием следующего:

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowstyle As Integer: windowstyle = 1
wsh.Run Chr(34) & BatchFilePath & Chr(34), windowstyle, waitOnReturn

Однако, это оказалось не в состоянии выполнить приведенный ниже код R (чрезвычайно упрощенный):

    library(ggplot2)
    library(gridExtra)
    library(ggpubr)

    x <- seq(1,10)
    y <- seq(11,20)
    z <- seq(6,15)
    a <- ggplot(data.frame(cbind(x,y)),aes(x=x,y=y))+geom_point()
    b <- ggplot(data.frame(cbind(y,z)),aes(x=y,y=z))+geom_point()
    c <- ggplot(data.frame(cbind(x,z)),aes(x=x,y=z))+geom_point()


    test <- ggarrange(ggarrange(a,b,nrow=2),c,ncol=2)
    ggsave(file="filepath.png",plot=test)

Проблема возникла, когда была вызвана функция ggarrange. Тем не менее, я смог заставить эту ситуацию работать, выполнив в VBA следующее (по сути, исключив шаг пакетного файла):

Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitTillComplete As Boolean: waitTillComplete = True
Dim style As Integer: style = 1
Dim errorCode As Integer
errorCode = wsh.Run("Rscript " & Chr(34) & RPath & Chr(34), style, waitTillComplete)

В чем разница между этими двумя подходами и почему один работал, а другой - нет? Отладка была затруднена из-за того, что пакетный терминал сразу закрывался при ошибке (возможно, из-за запуска его из VBA) Любые советы или рекомендации по устранению этих типов проблем также будет принята с благодарностью. Спасибо!

1 Ответ

0 голосов
/ 13 ноября 2018

Я думаю, что у вас есть проблема с PATH RScript в случае один: он теряется при вызове двойной партии.

...