Проблема с компиляцией примеров RInside под Windows

Я пытаюсь настроить RInside на работе, где мы вынуждены использовать среду Windows.

Я установил RTools и загрузил Двоичный файл RInside из CRAN.

Моя установка R находится в папке c:\R\R-2.12.2, поэтому проблем с папками с пробелами нет.

Я установил пакеты Rcpp и RInside в R.

Я запускаю следующий make-файл Makefile.win, включенный в загруженный двоичный файл RInside.

## -*- mode: makefile; tab-width: 8; -*-
##
## Simple Makefile
##
## TODO:
##  proper configure for non-Debian file locations,   [ Done ]
##  allow RHOME to be set for non-default R etc

## comment this out if you need a different version of R,
## and set set R_HOME accordingly as an environment variable
R_HOME :=       'cygdrive/c/R/R-2.12.2'

sources :=      $(wildcard *.cpp)
programs :=         $(sources:.cpp=)

## include headers and libraries for R
RCPPFLAGS :=        $(shell $(R_HOME)/bin/R CMD config --cppflags)
RLDFLAGS :=         $(shell $(R_HOME)/bin/R CMD config --ldflags)
RBLAS :=        $(shell $(R_HOME)/bin/R CMD config BLAS_LIBS)
RLAPACK :=      $(shell $(R_HOME)/bin/R CMD config LAPACK_LIBS)

## include headers and libraries for Rcpp interface classes
RCPPINCL :=         $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --    slave)
RCPPLIBS :=         $(shell echo 'Rcpp:::LdFlags()'  | $(R_HOME)/bin/R --vanilla --slave)

## include headers and libraries for RInside embedding classes
RINSIDEINCL :=      $(shell echo 'RInside:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave)
RINSIDELIBS :=      $(shell echo 'RInside:::LdFlags()'  | $(R_HOME)/bin/R --vanilla --slave)

## compiler etc settings used in default make rules
CXX :=          $(shell $(R_HOME)/bin/R CMD config CXX)
CPPFLAGS :=         -Wall $(shell $(R_HOME)/bin/R CMD config CPPFLAGS)
CXXFLAGS :=         $(RCPPFLAGS) $(RCPPINCL) $(RINSIDEINCL) $(shell     $(R_HOME)/bin/R     CMD config CXXFLAGS)
LDFLAGS =       -s
LDLIBS :=       $(RLDFLAGS) $(RBLAS) $(RLAPACK) $(RINSIDELIBS) $(RCPPLIBS) 
CC :=           $(shell $(R_HOME)/bin/R CMD config CXX)

all :           $(programs)

clean:
        rm -vf $(programs)

с командой

make -f Makefile.win

чтобы попробовать собрать стандартные примеры включены

Однако я получаю следующую ошибку:

C:\RInside_0.2.3\RInside\examples\standard>make -f Makefile.win
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
cygdrive/c/R/R-2.12.2/bin/R: not found
cygdrive/c/R/R-2.12.2/bin/R: not found
cygdrive/c/R/R-2.12.2/bin/R: not found
cygdrive/c/R/R-2.12.2/bin/R: not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
Wall  -s  rinside_callbacks0.cpp        -o rinside_callbacks0
make: Wall: Command not found
make: [rinside_callbacks0] Error 127 (ignored)
Wall  -s  rinside_module_sample0.cpp        -o rinside_module_sample0
make: Wall: Command not found
make: [rinside_module_sample0] Error 127 (ignored)
Wall  -s  rinside_sample0.cpp        -o rinside_sample0
make: Wall: Command not found
make: [rinside_sample0] Error 127 (ignored)
Wall  -s  rinside_sample1.cpp        -o rinside_sample1
make: Wall: Command not found
make: [rinside_sample1] Error 127 (ignored)
Wall  -s  rinside_sample2.cpp        -o rinside_sample2
make: Wall: Command not found
make: [rinside_sample2] Error 127 (ignored)
Wall  -s  rinside_sample3.cpp        -o rinside_sample3
make: Wall: Command not found
make: [rinside_sample3] Error 127 (ignored)
Wall  -s  rinside_sample4.cpp        -o rinside_sample4
make: Wall: Command not found
make: [rinside_sample4] Error 127 (ignored)
Wall  -s  rinside_sample5.cpp        -o rinside_sample5
make: Wall: Command not found
make: [rinside_sample5] Error 127 (ignored)
Wall  -s  rinside_sample6.cpp        -o rinside_sample6
make: Wall: Command not found
make: [rinside_sample6] Error 127 (ignored)
Wall  -s  rinside_sample7.cpp        -o rinside_sample7
make: Wall: Command not found
make: [rinside_sample7] Error 127 (ignored)
Wall  -s  rinside_sample8.cpp        -o rinside_sample8
make: Wall: Command not found
make: [rinside_sample8] Error 127 (ignored)
Wall  -s  rinside_sample9.cpp        -o rinside_sample9
make: Wall: Command not found
make: [rinside_sample9] Error 127 (ignored)
Wall  -s  rinside_test0.cpp        -o rinside_test0
make: Wall: Command not found
make: [rinside_test0] Error 127 (ignored)
Wall  -s  rinside_test1.cpp        -o rinside_test1
make: Wall: Command not found
make: [rinside_test1] Error 127 (ignored)

Я пробовал разные пути для R_HOME, но сомневаюсь, что смогу найти правильный. Я новичок в makefiles, поэтому вывод ошибок не очень помогает.

Надеюсь, у кого-то есть ценная информация, чтобы поделиться!

Заранее спасибо,

христианин


person Christian Bøhlke    schedule 13.04.2011    source источник
comment
Нет такой вещи, как R-2.1.2. Даже если бы они были, им было бы ~ 6 лет.   -  person Joshua Ulrich    schedule 13.04.2011
comment
Хорошо поймал. Также, вероятно, нужен начальный «/» для чего-то вроде «/cygdrive/c/R/R-2.12.2». Смешивание Cygwin и MinGW тоже доставило мне головную боль, поэтому, возможно, cmd.exe лучше. О Виндовс....   -  person Dirk Eddelbuettel    schedule 13.04.2011
comment
@Joshua Ulrich @Dirk Eddelbuettel После исправления обоих я теперь могу скомпилировать! Однако теперь он говорит, что не может найти пакеты Rcpp и RInside, которые я специально установил. Погружусь в это завтра!   -  person Christian Bøhlke    schedule 13.04.2011
comment
Это будет вашим локальным использованием R, так как Makefile просит R сообщить ему, где Rcpp и RInside, а R не знает.   -  person Dirk Eddelbuettel    schedule 13.04.2011


Ответы (3)


У меня похожая установка на работе, поэтому я попробовал. Я могу построить примеры после того, как укажу R_LIBS_SITE. Обратите внимание, что это должен быть путь Windows, а не путь Cygwin!

export R_LIBS_SITE=c:/R/site-library
person Joshua Ulrich    schedule 13.04.2011
comment
Я склонен говорить, что в моем файле ~/.Renvironment. Makefile предполагает, что R знает о своих пакетах. Мы должны иметь возможность запрашивать Rcpp и RInside об их путях. Но если у вас есть хорошее предложение, пришлите мне двухстрочный текст, который мы могли бы добавить в Makefile.win. - person Dirk Eddelbuettel; 13.04.2011
comment
@Dirk: я тоже... в Linux. ;-) Я указал его в R_HOME/etc/Rcmd_environ, но он не подхватывается. Это работает, если я экспортирую его из оболочки. - person Joshua Ulrich; 13.04.2011
comment
Ну по памяти есть еще Renviron.site и там всегда ~/.R* как я и писал; иначе см. справку (запуск) - person Dirk Eddelbuettel; 13.04.2011
comment
Установка .Library.site ‹- file.path(C:/R/R-2.12.2/library) в моем файле RProfile.site была лекарством! Большое спасибо за помощь! Надеюсь увидеть некоторых из вас на предстоящей конференции RInFinance в Чикаго! - person Christian Bøhlke; 14.04.2011

Кажется, у вас есть две разные проблемы:

  1. Ваш $PATH, вероятно, не работает, или, как намекнул Джош, ваше назначение $R_HOME неверно. Если make действительно является бинарным файлом из Rtools, а пути, которые вы назначаете, верны, то сборка завершается успешно. Это общее правило для создания пакетов R в Windows: очень усердно следуйте инструкциям, и все будет работать.

  2. RInside не работает в Windows, извините. Он будет строиться, и вы получите segfaults. Мы с Роменом четко заявляем об этом в документации.

Поскольку мы с Роменом работаем почти исключительно с OS X и Linux соответственно, мы были бы признательны за помощь в отладке. Это должно быть выполнимо, но, вероятно, требует серьезной готовности изучить внутренности R, поскольку что-то в подсистеме памяти выходит из строя. Чего явно нет в ОС с буквой X в названии.

Обновлено 08 декабря 2011 г.: RInside 0.2.5, опубликованный на CRAN на сегодняшний день, восстанавливает функциональность Windows — с помощью исправления, которое Джеймс отмечает в другом комментарии.

person Dirk Eddelbuettel    schedule 13.04.2011

Сегодня я потратил немного времени на поиск ошибки в версии RInside для Windows. Я считаю, что обнаружил ошибку, которая выглядит следующим образом:

В RInside::initialize(……) заполняется структура structRStart, однако теперь для этого требуется заполнение дополнительных полей в случае окон, как показано в Rf_initEmbeddedR() из R\src\gnuwin32\embedded.c.

Rp->rhome = RHome;
Rp->home = getRUser();
Rp->CharacterMode = LinkDLL;
Rp->ReadConsole = myReadConsole;
Rp->WriteConsole = myWriteConsole;
Rp->CallBack = myCallBack;
Rp->ShowMessage = askok;
Rp->YesNoCancel = askyesnocancel;
Rp->Busy = myBusy;

Эквивалентные назначения потребуются в RInside.cpp, чтобы обеспечить допустимые обратные вызовы.

person James Bates    schedule 28.11.2011
comment
Джеймс любезно сообщил мне об этом по электронной почте, и это выглядит многообещающе. В данный момент у меня нет доступа к машине с Windows, если кто-то хочет проверить это, пожалуйста, свяжитесь с нами, поскольку я отправил Джеймсу несколько дополнительных электронных писем, но я думаю, что он прекратил это. Соответствующая структура определена в RStartup.h с полями, показанными здесь #ifdef в Windows. - person Dirk Eddelbuettel; 28.11.2011