Rcpp — как вызвать функцию R из функции Rcpp в Shiny

я только что познакомился с rcpp, у меня проблема с моей функцией rcpp, когда я непосредственно запускаю приложение, ошибка отображения программы не смог найти функцию «крит». но когда я запускаю функцию частично с CTRL + R и затем запустите приложение, программа работает хорошо. Есть ли код для вызова функции R из функции RCPP в блестящей, что я не должен запускать функцию частично? другими словами, когда я непосредственно запускаю приложение, блестящий будет работать хорошо. это пример кода …

сервер

library(shiny)
library(Rcpp)
krit <- function(n){
mat <- matrix(1,n,1)
return(mat)
}
cppFunction('
NumericMatrix tes1(int n){
Function krit("krit");
NumericMatrix test = krit(n+1);
return(test);
}
')

shinyServer(function(input, output) {

output$testing <- renderUI({
list(
renderPrint(tes1(3))
)
})

})

щ

library(shiny)
shinyUI(fluidPage(
titlePanel("Shiny Text"),
sidebarLayout(
sidebarPanel(

),
mainPanel(

uiOutput("testing")
)
)
))

0

Решение

Это предметный вопрос относительно того, как shiny а также Rcpp просматривать различные среды.

Происходит проблема с доступом к глобальной среде с помощью …

1) Стандарт Rcpp::Function магия

Rcpp::Function krit("krit");

2) Rcpp::Environment с глобальным извлечением выдает пропущенное значение.

Rcpp::Environment env = Environment::global_env();
Rcpp::Function krit = env("krit");

Ошибка:

file3d3f43b856e05.cpp: 9: 45: ошибка: нет совпадения для вызова ‘(Rcpp :: Environment) (const char [5])’

Таким образом, лучшее, что можно сделать для решения этой проблемы, это передать функцию R, которую вы хотите использовать, в скомпилированную функцию C ++ и вызвать ее. например

NumericMatrix tes1(int n, Rcpp::Function krit)

Или вам нужно будет изменить server.R чтобы:

library(shiny)
library(Rcpp)

krit <- function(n){
mat <- matrix(1,n,1)
return(mat)
}

cppFunction('
// Added krit as a function pass
NumericMatrix tes1(int n, Rcpp::Function krit){
NumericMatrix test = krit(n+1);
return(test);
}
')

shinyServer(function(input, output) {

output$testing <- renderUI({
list(
# Added parameter to `tes1` to pass in krit.
renderPrint(tes1(n = 3, krit = krit))
)
})

})

Таким образом, вы должны получить:

shiny_text

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]