в моей системе Knitr не может скомпилировать документ, использующий пакет gdata.

Мой последний два вопроса были просто смущающими, но я быть уверенным, что это реальная сделка. Моя система является новой установкой, поэтому версии актуальны, кроме ОС: Windows 7 SP1, R-3.0.1, Lyx 2.0.6, Knitr 1.2, gdata 2.12.0.2.

Во-первых, отмечу, что gdata корректно работает в RGui. Теперь вот документ, который я пытаюсь скомпилировать:

И вот вывод.

Пакет gdata также успешно загружается в Rscript, вызываемом из командной строки. Я использовал LyX для экспорта файла .Rnw, который успешно вяжется из RGui и из скрипта, переданного в Rscript из командной строки.

У меня была похожая (или, возможно, такая же, я не могу поклясться в идентичности сообщения об ошибке) проблема, когда я впервые начал пользоваться компьютером. На тот раз это было связано с контролем учетных записей пользователей Windows 7 и было решено, когда я понял, как автоматически запускать R от имени администратора (без перехода по клику — мило). Поэтому я попытался удалить атрибут «только для чтения» и все ограничения безопасности для всего, что могло быть задействовано — папка R, папка LyX, папка моего пакета, MikTeX. Не повезло.

Что дальше?


ETA: Насколько я могу судить, ни один R-скрипт, вызванный из LyX, не может загрузить пакет gdata. Я изменил конвертер файлов, чтобы записать stdout и stderr в файл, что дало то же сообщение об ошибке, что и на скриншоте выше, но с предшествующим этим:

Не удается найти Data/Dumper.pm в @INC (@INC содержит: C:/Users/cyanofsky/Documents/R/win-library/3.0/gdata/perl C:/Program Files (x86)/MiKTeX 2.9/miktex /lib .) в C:/Users/cyanofsky/Documents/R/win-library/3.0/gdata/perl/module_tools.pl строка 11.

Ошибка BEGIN — компиляция прервана в C:/Users/cyanofsky/Documents/R/win-library/3.0/gdata/perl/module_tools.pl, строка 11.

Ошибка компиляции в C:/Users/cyanofsky/Documents/R/win-library/3.0/gdata/perl/supportedFormats.pl, строка 9.

работает 'C:\Program Files\R\R-3.0.1\bin\x64\Rterm.exe --slave --no-restore --no-save --no-restore --file=C:/Program Files (x86)/LyX 2.0/Ресурсы/скрипты/lyxknitr.R --args C:/Users/cyanofsky/AppData/Local/Temp/lyx_tmpdir.Hp8008/lyx_tmpbuf3/xxxxxxxxx.Rnw C:/Users/cyanofsky/AppData/Local/ Temp/lyx_tmpdir.Hp8008/lyx_tmpbuf3/xxxxxxxx.tex ISO-8859-15'


ETA: поиск Data/Dumper выдал следующее:

http://help.directadmin.com/item.php?id=189

Я убедился, что в моей установке Perl64 есть модуль данных; это в C:\Perl64\lib. Так что это случай, когда какая-то переменная пути где-то неправильно настроена. Это не переменная префикса пути LyX; нет, нет, это было бы слишком просто.


За ответ Ихуи:

Из графического интерфейса (в данном случае RStudio):

> strsplit(Sys.getenv('PATH'), ';')
[[1]]
 [1] "C:\\Program Files\\R\\R-3.0.1\\bin\\x64"                        
 [2] "C:\\Program Files\\R\\R-3.0.1\\bin\\x64"                        
 [3] "C:\\Perl64\\site\\bin"                                          
 [4] "C:\\Perl64\\bin"                                                
 [5] "c:\\Rtools\\bin"                                                
 [6] "c:\\Rtools\\gcc-4.6.3\\bin"                                     
 [7] "c:\\Program Files (x86)\\AMD APP\\bin\\x86_64"                  
 [8] "c:\\Program Files (x86)\\AMD APP\\bin\\x86"                     
 [9] "c:\\Program Files (x86)\\Intel\\iCLS Client\\"                  
[10] "c:\\Program Files\\Intel\\iCLS Client\\"                        
[11] "C:\\Windows\\system32"                                          
[12] "C:\\Windows"                                                    
[13] "C:\\Windows\\System32\\Wbem"                                    
[14] "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\"               
[15] "c:\\Program Files (x86)\\ATI Technologies\\ATI.ACE\\Core-Static"
[16] ""                                                               
[17] "C:\\Program Files\\Intel\\WiFi\\bin\\"                          
[18] "C:\\Program Files\\Common Files\\Intel\\WirelessCommon\\"       
[19] "C:\\Program Files (x86)\\Intel\\OpenCL SDK\\3.0\\bin\\x86"      
[20] "C:\\Program Files (x86)\\Intel\\OpenCL SDK\\3.0\\bin\\x64"      
[21] "C:\\Program Files (x86)\\MiKTeX 2.9\\miktex\\bin\\"             

> Sys.which('perl')
                       perl 
"C:\\Perl64\\bin\\perl.exe" 

Вот изнутри вызова Rscript:

> load("~/lyxknitrpaths.RData")
> syspath
[[1]]
 [1] "C:\\Program Files\\R\\R-3.0.1\\bin\\x644"                       
 [2] "LyXDir\\bin"                                                    
 [3] "$LyXDir\\Python"                                                
 [4] "$LyXDir\\Python\\Lib"                                           
 [5] "$LyXDir\\imagemagick"                                           
 [6] "C:\\Program Files (x86)\\MiKTeX 2.9\\miktex\\bin"               
 [7] "C:\\Program Files (x86)\\LyX 2.0\\ghostscript\\bin"             
 [8] "C:\\Perl64\\lib"                                                
 [9] "C:\\Perl64"                                                     
[10] "C:\\Program Files (x86)\\LyX 2.0\\\\Python"                     
[11] "C:\\Program Files (x86)\\LyX 2.0\\\\Python\\Lib"                
[12] "C:\\Program Files (x86)\\LyX 2.0\\\\imagemagick"                
[13] "C:\\Program Files (x86)\\LyX 2.0\\\\bin"                        
[14] "C:\\Program Files (x86)\\LyX 2.0\\bin\\"                        
[15] "C:\\Program Files\\R\\R-3.0.1\\bin\\x64"                        
[16] "C:\\Perl64\\site\\bin"                                          
[17] "C:\\Perl64\\bin"                                                
[18] "c:\\Rtools\\bin"                                                
[19] "c:\\Rtools\\gcc-4.6.3\\bin"                                     
[20] "c:\\Program Files (x86)\\AMD APP\\bin\\x86_64"                  
[21] "c:\\Program Files (x86)\\AMD APP\\bin\\x86"                     
[22] "c:\\Program Files (x86)\\Intel\\iCLS Client\\"                  
[23] "c:\\Program Files\\Intel\\iCLS Client\\"                        
[24] "C:\\Windows\\System32"                                          
[25] "C:\\Windows"                                                    
[26] "C:\\Windows\\System32\\wbem"                                    
[27] "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\"               
[28] "c:\\Program Files (x86)\\ATI Technologies\\ATI.ACE\\Core-Static"
[29] "C:\\Program Files\\Intel\\WiFi\\bin\\"                          
[30] "C:\\Program Files\\Common Files\\Intel\\WirelessCommon\\"       
[31] "C:\\Program Files (x86)\\Intel\\OpenCL SDK\\3.0\\bin\\x86"      
[32] "C:\\Program Files (x86)\\Intel\\OpenCL SDK\\3.0\\bin\\x64"      
[33] "C:\\Program Files (x86)\\MiKTeX 2.9\\miktex\\bin\\"             

> perlpath
                                             perl 
"C:\\PROGRA~2\\MIKTEX~1.9\\miktex\\bin\\perl.exe" 

person Cyan    schedule 16.06.2013    source источник


Ответы (1)


Похоже, два экземпляра Perl каким-то образом столкнулись в вашем PATH. Пожалуйста, опубликуйте вывод кода ниже

strsplit(Sys.getenv('PATH'), ';')
Sys.which('perl')

как из LyX/knitr, так и из простого R. (Не стесняйтесь заменять что-либо, касающееся конфиденциальности, например, ваше имя пользователя, на foobar)

person Yihui Xie    schedule 17.06.2013
comment
Информация выше по вашему запросу. С учетом регистра символов в пути GUI нет ничего, кроме пути lyxknitr.R. - person Cyan; 17.06.2013
comment
А, понял. Я изменил lyxknitr.R, чтобы MikTex был удален из PATH; теперь gdata находит правильный экземпляр perl. - person Cyan; 17.06.2013
comment
@Cyan Это решает проблему, но, вероятно, это не идеальный путь. Я бы предпочел отредактировать Tools-->Preferences-->Paths-->PATH prefix и убедиться, что путь к MikTeX не включен туда, поскольку он уже находится в вашей системе PATH, и это приводит к тому, что его perl имеет приоритет над вашим собственным Perl. - person Yihui Xie; 17.06.2013
comment
Итак, я попробовал, и это не решает проблему - я думаю, что виноват порядок элементов в системном пути. - person Cyan; 17.06.2013
comment
@Cyan Именно порядок элементов PATH является корнем проблемы. Ну я сейчас не под виндой, так что проверить не могу. Согласно вашей попытке, LyX может принудительно добавить путь MikTeX в PATH. - person Yihui Xie; 17.06.2013