2015-08-19 5 views
0

Это очень конкретный вопрос.Ошибка при свертывании в R при установке ReferenceClass из пакета, загруженного devtools

У меня есть простое блестящее приложение, использующее последнюю версию R (3.2.2), RStudio (0.99.473), все пакеты обновлены, протестированы как в Windows 7, так и в Ubuntu 14.04. То же самое происходит и в SO.

У меня есть библиотека функций, которые я встроил в «пакет», с правильно созданным файлом DESCRIPTION. Я использую devtools для загрузки этого пакета. Итак, первые строки коды в моей очень простой Блестящей приложении являются

library("devtools") 
load_all("../../RTEMP"); 

Поскольку я планирую использовать некоторые из этих функций в Блестящем приложении. Имя пакета на самом деле не RTEMP, я создал это временно, чтобы изолировать проблему. Этот временный пакет содержит один файл внутри RTEMP/R /, something.r. Этот файл содержит одну строку кода:

AA <- setRefClass("AA"); 

Так я создаю ссылочный класс ничего, кроме названия (мой оригинальный код основан на R объектов данного типа). Я ничего не делаю с пакетом, просто загружая его.

При запуске приложения Shiny в первый раз после открытия RStudio он отлично работает. Если закрыть приложение и открыть его снова, я получаю следующее сообщение об ошибке:

ERROR: shinyjs: you cannot mix named and unnamed arguments in the same function call 

Любопытно, что если изменить начало моей Блестящей приложение к этому:

#library("devtools") 
#load_all("../../RTEMP"); 
AA <- setRefClass("AA"); 

Так, комментируя пакет загружая и устанавливая ссылочный класс внутри приложения Shiny, все работает отлично.

Проблема возникает, когда я вызываю setRefClass из пакета, загруженного devtools, но не тогда, когда я вызываю его непосредственно из Shiny. Кроме того, я могу загрузить его в первый раз, но не второй (окно Shiny просто показывает сообщение об ошибке выше).

Любые идеи, которые могут вызывать эту ошибку?

спасибо.

+0

Я думаю, что проблема должна быть больше с devtools, чем с Shiny. При выполнении load_all функция по умолчанию пытается выгрузить пакет и загрузить его снова. В документации для функции разгрузки упоминаются некоторые ошибки с классами S4, что они не выгружаются должным образом. Интересно, может ли refClasses испытать ту же проблему. Мне кажется, что во второй раз, когда я загружаю пакет, остаточный результат с первого раза, который я загрузил, может вызвать эту ошибку. – Chicoscience

+0

Глядя на сообщение об ошибке, похоже, что он пытается вызвать функцию 'shinyjs'. Это может произойти, если shinyjs загружен, и вы вызываете вызов функции, отличной от имен, для функции, которая имеет shinyjs. Например, shinyjs имеет функцию 'info', поэтому, если вы используете пакет, который делает вызов' info', он может случайно попасть в версию shinyjs.Я просто обновил версию shinyjs github, чтобы включить функцию, которая была вызвана в сообщении об ошибке, поэтому вы можете попробовать загрузить самую новую версию ('devtools :: install_github (« daattali/shinyjs »)) и посмотреть, какая функция вызывает эту ошибку –

+0

Спасибо, @daattali. С вашим обновлением я выяснил, что причиной проблемы является функция 'removeClass'. Поэтому я считаю, что проблема возникает, когда' devtools' вызывает функцию 'unload' перед загрузкой пакета во второй раз. – Chicoscience

ответ

0

Это действительно проблема в пакете devtools, который вызывает несовместимость с shinyjs. Я отправил это bug report и, надеюсь, этого не произойдет в следующих версиях.

Если у вас возникло аналогичное сообщение об ошибке с Shiny, могут быть другие функции в других пакетах (или в вашем собственном пакете), которым требуется пространство имен.

+1

Это проблема, которая возникает во многих пакетах, и с 29 июня 2015 года она проверяется. Таким образом, любой пакет, который был отправлен в CRAN после 29 июня, не будет иметь этой проблемы, потому что теперь они строго относятся к пространству имен. –

 Смежные вопросы

  • Нет связанных вопросов^_^