Kamil Bęczyński R, SAS, analizy
Temat: Integracja Excel i R z wykorzystaniem VBA
(miałem odświeżyć wątek Nowy interfejs R -> .NET, ale zbyt mocno skupiłem się na VBA)Zadaniem jest udostępnienie wybranych algorytmów wykonywanych w R użytkownikom znającym tylko program Excel. Moje doświadczenie z różnymi wtyczkami R<->Excel jest niestety negatywne. Dodam, że niestety w projekcie nie będzie wykorzystana wersja 2007 i 2010 Excel. Typowy scenariusz wygląda następująco :
Użytkownik w Excel uruchamia dodatek, pojawia się formularz, wybiera pole 'y', wybiera przycisk 'zaznacz dane', zaznacza dane w Excel, potem to samo dla zmiennej 'x', ustawia inne parametry i wybiera przycisk 'glm', wtedy następuje przekazanie danych z kolumn arkusza odpowiadających 'y' oraz 'x' do R i wykonanie obliczeń. Następnie dane są przekazywane do Excela i wyświetlane w formularzu, użytkownik może je wkleić do Excela lub zmienić parametry i powtórzyć procedurę estymacji.
Myślałem, żeby stworzyć dodatek w VBA i komunikować się z R uruchamiając go w trybie wsadowym funkcją 'Shell', VBA miałby za zadanie zapisać na dysku dane 'y' i 'x', następnie uzupełnić napisany wcześniej w R skrypt parametrami wybranymi przez użytkownika i uruchomić go w R. Niestety taki scenariusz pozwala tylko na jednokierunkową komunikację :
Excel->VBA(zapisanie 'y','x', uruchomienie sparametryzowanego skryptu w R)->R(odczyt 'x','y',obliczenia, zapisanie wyniku na dysku)->VBA(odczyt wyniku, wklejenie danych do formularza)
,jednak to rozwiązanie jest nieeleganckie, niebezpieczne (chyba można zawiesić system), mało elastyczne np. odczyt wyniku obliczeń z R przy użyciu VBA, to praca na pliku tekstowym.
Ponadto widzę poważny problem w samej jednokierunkowości takiego rozwiązania, jeśli po zakończeniu estymacji użytkownik chciałby przeprowadzić prognozę, to albo estymacja musiałaby zostać powtórzona (co na przykład przy lasach losowych może zająć kilkanaście minut) lub zapisany powinien zostać wcześniej obszar roboczy, następnie załadowany i prognoza przeprowadzona.
Mógłbym jeszcze zamiast trybu wsadowego skorzystać ze schowka systemowego i emulacji klawiatury funkcją 'SendKeys', ale wydaje mi się, że nie tędy droga. czy mógłbym wypróbować coś jeszcze korzystając z VBA ? A może R ma równiej jeszcze coś do zaoferowania w tym temacie ?