Rcpp - 如何在Shiny

时间:2016-05-01 17:56:43

标签: c++ r shiny rcpp

我刚刚使用rcpp,我的rcpp功能有问题,当我直接运行App时,程序显示错误无法找到功能" krit" 。但是当我用 CTRL + R 部分运行该功能然后运行App程序运行良好。是否有一个代码从rcpp函数调用R函数闪亮,我不能部分运行该函数?换句话说,当我直接运行App时,闪亮的运行会很好。这是示例代码......

服务器

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))
    )
  })

})

UI

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

    ),
    mainPanel(

      uiOutput("testing")
    )
  )
))

1 个答案:

答案 0 :(得分:2)

这是关于shinyRcpp如何查看不同环境的范围问题。

使用...

访问全球环境时遇到的问题

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:错误:无法匹配调用&#39;(Rcpp :: Environment)(const char [5])&#39;

因此,解决此范围问题可以做的最好的事情是将要使用的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