Переименование экспортированной функции с помощью Rcpp::export не выполняется при определенной установке

Экспорт функции Rcpp с другим именем выполняется успешно на одном компьютере, но не выполняется на другом. Среды R очень похожи. Что я делаю не так?

Подробности

У меня есть пакет R с функцией Rcpp, которая экспортируется со следующей подписью (в sample_int_crank.cpp):

// [[Rcpp::export(sample.int.crank)]]
IntegerVector sample_int_crank(int n, int size, NumericVector prob) {
    ...

Эта функция объявлена ​​пустой в соответствующем файле R (sample_int_crank.R):

sample.int.crank <- function(n, size, prob) {
}

EDIT: когда я удаляю этот файл R, функция становится доступной. Но где разместить комментарии roxygen2 для этой функции?

Теперь, когда я устанавливаю пакет с GitHub,

library(devtools)
install_github('wrswoR', 'muelleki', '0.0.6')

на машине A написано:

> sample.int.crank
internal C++ function <0x29ddc40>
    signature : Rcpp::IntegerVector sample.int.crank(int, int, Rcpp::NumericVector)

и на машине B:

> sample.int.crank
function(n, size, prob) {
}
<environment: namespace:wrswoR>

EDIT: если sample_int_crank.R удалить из пакета, выходные данные будут выглядеть по-разному, но идентичны для A и B. Что здесь происходит?

library(devtools)
install_github('wrswoR', 'muelleki')

> sample.int.crank
function (n, size, prob) 
{
    .Call("wrswoR_sample_int_crank", PACKAGE = "wrswoR", n, size, 
        prob)
}
<environment: namespace:wrswoR>

sessionInfo() кажется более или менее идентичным, по крайней мере, для R и Rcpp -- A:

> sessionInfo()
R version 2.15.3 (2013-03-01)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] wrswoR_0.0.6    logging_0.7-102 Rcpp_0.10.3     devtools_0.8   

loaded via a namespace (and not attached):
 [1] digest_0.5.2    evaluate_0.4.2  httr_0.1.1      memoise_0.1    
 [5] parallel_2.15.3 plyr_1.7.1.99.2 RCurl_1.95-0    stringr_0.6.1  
 [9] tools_2.15.3    whisker_0.1    

Б:

> sessionInfo()
R version 2.15.3 (2013-03-01)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.utf-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.utf-8        LC_COLLATE=en_US.utf-8
 [5] LC_MONETARY=en_US.utf-8    LC_MESSAGES=en_US.utf-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.utf-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] wrswoR_0.0.6   logging_0.6-92 Rcpp_0.10.3    devtools_1.1

loaded via a namespace (and not attached):
[1] digest_0.6.3    evaluate_0.4.3  httr_0.2        memoise_0.1
[5] parallel_2.15.3 RCurl_1.95-4.1  stringr_0.6.2   tools_2.15.3
[9] whisker_0.1

Есть идеи?


person krlmlr    schedule 03.04.2013    source источник


Ответы (1)


Что касается вашего вопроса

Но где разместить комментарии roxygen2 для этой функции?

Должен разочаровать вас тем, что здесь просто нет поддержки roxygen(2) в атрибутах Rcpp. Может быть, вы хотите внести свой вклад?

С другой стороны, написание обычных функций C++ в src/ и вызов их из обычных функций R, конечно же, поддерживается, и roxygen2 может прекрасно использовать его.

Что касается того, что devtools делает с вашим пакетом: тоже понятия не имею. Ни Ромен, ни я не используем devtools, так что вы находитесь на недокументированной и неопределенной территории.

person Dirk Eddelbuettel    schedule 03.04.2013
comment
Не могли бы вы взглянуть на github.com/muelleki/wrswoR (рабочая версия) и/или github.com/muelleki/wrswoR/tree/0.0.6 (сломанная версия) ? Возможно, я упускаю что-то очень важное... - person krlmlr; 03.04.2013
comment
Нет, извините, я не могу выполнить для вас индивидуальную отладку. Но у проекта есть список рассылки, к которому присоединяются и другие. Может быть, вы могли бы использовать это? - person Dirk Eddelbuettel; 03.04.2013
comment
Это нормально. Благодаря вашему ответу я теперь могу воспроизвести ошибочное поведение на машине A после обновления devtools до 1.1. Странное взаимодействие... - person krlmlr; 03.04.2013
comment
Пока что я могу жить с ведением документации по экспортируемым функциям Rcpp в отдельном файле .R. Возможно, это становится проблемой, когда таких функций очень много. - person krlmlr; 03.04.2013
comment
Звучит неплохо. Я думаю, JJ заявил, что в конечном итоге это должно поддерживаться только из файлов C++, но сначала нужно написать такое расширение парсера. Может быть, вы хотите помочь? ;-) - person Dirk Eddelbuettel; 03.04.2013
comment
Я мог бы взглянуть. Где лучше всего посмотреть документацию по атрибутам Rcpp? - person krlmlr; 03.04.2013
comment
Соответствующая виньетка и код. И вопросы по rcpp-devel :) - person Dirk Eddelbuettel; 03.04.2013