Запуск приложений R через Excel

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
oda412
Новоприбывший
Сообщения: 13
Зарегистрирован: 01 июл 2020, 11:43
Репутация: 0
Откуда: Брёхово

Запуск приложений R через Excel

Сообщение oda412 » 13 июл 2020, 13:44

Добрый день!
Не знаю, на какой форум уместнее задать этот вопрос: по R или Excel.

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

Пока работаю над таким решением:
1. приложение разрабатываю с помощью пакета Shiny. Папка с проектом "rrr" лежит в рабочей директории.

2. создаю файл user.R, который запускает этот проект

Код: Выделить всё

library("shiny")
runApp("rrr")
Когда запускаю эти две команды в этом файле - в режиме полета прекрасно открывается web-страница с проектом

3. В Excel для кнопки пишу макрос, который запускает файл user.R

Код: Выделить всё

Public Sub ttt()
    Dim shell As Object
    Set shell = VBA.CreateObject("WScript.Shell")
    Dim waitTillComplete As Boolean: waitTillComplete = True
    Dim style As Integer: style = 1
    Dim errorCode As Integer
    Dim path As String
    
    path = "RScript C:\Users\Olga\Desktop\user.R"
    errorCode = shell.Run(path, style, waitTillComplete)
End Sub
Но при выполнении этого макроса висит черная командная строка, и ничего не происходит.


Помогите, пожалуйста, решить эту проблему.
Может быть, вы подскажете более элегантный способ разработки пользовательских интерфейсов R при отсутствии подключения к интернету. В идеале - значок на рабочем столе, который открывает пользовательскую форму с элементами управления.

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Запуск приложений R через Excel

Сообщение trir » 13 июл 2020, 15:23

переписать всё на VBA
https://www.r-bloggers.com/build-a-stat ... h-r-shiny/

gamm
Гуру
Сообщения: 4047
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Запуск приложений R через Excel

Сообщение gamm » 13 июл 2020, 17:55

oda412 писал(а):
13 июл 2020, 13:44
Но при выполнении этого макроса висит черная командная строка, и ничего не происходит
Создайте bat - файл, в который поместите

Код: Выделить всё

RScript C:\Users\Olga\Desktop\user.R
, его и стартуйте.

P.S. Похоже слэши в пути не в ту сторону, для начала создайте bat - файл, и его запустите, чтобы убедиться, что все работает. И я бы крайне не рекомендовал что-то стартовать с рабочего стола, заведите папку.

oda412
Новоприбывший
Сообщения: 13
Зарегистрирован: 01 июл 2020, 11:43
Репутация: 0
Откуда: Брёхово

Re: Запуск приложений R через Excel

Сообщение oda412 » 15 июл 2020, 18:10

gamm, благодарю Вас за ответ.
К сожалению, картина повторяется
error.png
error.png (7.15 КБ) 5863 просмотра

gamm
Гуру
Сообщения: 4047
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Запуск приложений R через Excel

Сообщение gamm » 15 июл 2020, 18:22

вы демон запустили, он ждет команд, поэтому все и висит. Я с shiny дел не имел, не исключено, что просто не находит rrr
А в консоли вот это если запустить

Код: Выделить всё

library("shiny")
runApp("rrr")
что происходит? например, вставьте print("Test") до и после вызова runApp, до них вообще дело доходит?

oda412
Новоприбывший
Сообщения: 13
Зарегистрирован: 01 июл 2020, 11:43
Репутация: 0
Откуда: Брёхово

Re: Запуск приложений R через Excel

Сообщение oda412 » 15 июл 2020, 20:56

gamm, набрала, как вы написали, только вместо print("Test"), которая выдает ошибку, ввела команду whoami.
Результат такой:
Изображение

Вообще, если эти две строчки запускать в самом r документе, то внизу тоже отображается "listening", пока пользователь работает в браузере:
Изображение

Вот сам пользовательский интерфейс, который отображается в это время в браузере:
Изображение

gamm
Гуру
Сообщения: 4047
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Запуск приложений R через Excel

Сообщение gamm » 15 июл 2020, 22:57

по умолчанию браузер не стартует, еcли сессия не интерактивная. Нужно типа такого

Код: Выделить всё

library(shiny)
runApp("c:/temp",launch.browser=TRUE)
там другая проблема есть, сервер не убивается после выхода из браузера. Но это другая история.

Строго говоря, у вас две программы: http сервер, который выполняет работу (сайт), и клиент (браузер). Из RScript запускается только сервер (если не указать обратное), из интерактивной среды - оба. И при запущенном сервере можно открыть много браузеров, насколько я понимаю, из разных мест. Т.е. вам нужно отдельно запустить сервер (а потом его отдельно убить), и запускать только клиента по мере надобности. Либо найти, как сервер убивать автоматически.

oda412
Новоприбывший
Сообщения: 13
Зарегистрирован: 01 июл 2020, 11:43
Репутация: 0
Откуда: Брёхово

Re: Запуск приложений R через Excel

Сообщение oda412 » 16 июл 2020, 11:18

gamm, дополнение launch.browser=TRUE помогло! Но браузер открывается только при непосредственном запуске .bat - файла. Если его запускаю через VBA Excel - то на мгновение открывается командная строка, потом пропадает, и браузер не открывается. Перепробовала разные варианты кода VBA - без результатов. Ладно, мой пользователь будет просто нажимать на .bat - файл на рабочем столе. Спасибо большое за идею!

oda412
Новоприбывший
Сообщения: 13
Зарегистрирован: 01 июл 2020, 11:43
Репутация: 0
Откуда: Брёхово

Re: Запуск приложений R через Excel

Сообщение oda412 » 16 июл 2020, 11:33

gamm, дополнение launch.browser=TRUE помогло! А для того, чтобы все заработало в Excel, дописала в файле user.R строчку:

Код: Выделить всё

setwd("C:/Users/Olga/Desktop/r_interface")
=== Итог ===

Код в user.R

Код: Выделить всё

library("shiny")
setwd("C:/Users/Olga/Desktop/r_interface")
runApp(
  appDir = "rrr",
  launch.browser=TRUE
)
Код в .bat файле

Код: Выделить всё

RScript C:\Users\Olga\Desktop\r_interface\user.R
Код в VBA

Код: Выделить всё

Public Sub test()
    Dim shell As Object
    Set shell = VBA.CreateObject("WScript.Shell")
    Dim waitTillComplete As Boolean: waitTillComplete = True
    Dim style As Integer: style = 0
    Dim errorCode As Integer
    Dim path As String
    path = "C:\Users\Olga\Desktop\r_interface\new.bat"
    errorCode = shell.Run(path, style)
End Sub
Теперь все отлично открывается по кнопке из Excel, командная строка невидима, и все отлично закрывается. Спасибо за помощь!!!

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей