я только что познакомился с 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")
)
)
))
Это предметный вопрос относительно того, как 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))
)
})
})
Таким образом, вы должны получить:
Других решений пока нет …