代码之家  ›  专栏  ›  技术社区  ›  meenaparam

如何在R光泽应用程序中使用工作区对象

  •  0
  • meenaparam  · 技术社区  · 8 年前

    我希望用户能够输入一个数据帧对象的名称,并在一个闪亮的应用程序中将该对象呈现为格式化的数据表。

    这是一个玩具的例子。工作区中有两个可用的数据帧对象: df1 和 df2 . 当用户输入 DF1 ,我希望呈现该数据帧。同样地 DF2 或者对于他们工作区中的任何其他数据帧。

    我怀疑我必须对环境、范围界定或评估做些什么,但我不确定是什么。

    我已经在代码中发表了评论,在代码中我可以硬编码内置的 mtcars 数据集并正确呈现。现在,我只想能够对用户工作区中的任何临时数据帧执行相同的操作。

    library(shiny)
    set.seed(1234)
    
    x <- sample.int(n = 20)
    y <- sample(x = LETTERS, size = 20)
    a <- rnorm(n = 20)
    b <- sample(x = letters, size = 20)
    
    df1 <- data.frame(x = x, y = y)
    df2 <- data.frame(a = a, b = b)
    
    
    # Define UI ----
    ui <- fluidPage(
      titlePanel("Using text inputs to select dataframes"),
    
      sidebarLayout(position = "left",
                    sidebarPanel(width = 5,
                                textInput("dfInput", h5("Enter name of dataframe"),
                                                    value = "")),
    
                    mainPanel(width = 6,
                              h4("Here's your data"),
                              textOutput("selected_df"),
                              dataTableOutput("view")
                    )
    
      )
    )
    
    
    # Define server logic ----
    server <- function(input, output, session) {
    
      output$selected_df <- renderText({
        paste("You have selected ", input$dfInput)
      })
    
      output$view <-
        renderDataTable({
          input$dfInput # this should render the selected dataframe. If you replace this with mtcars then that dataset is correctly rendered.
        })
    
    }
    
    
    # Run the app ----
    shinyApp(ui = ui, server = server)
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Pork Chop    8 年前

    我们将首先获取全局环境中的所有数据帧,然后使用 get 访问对象。我将 textinput 改为 selectinput 这样您就不需要键入任何内容,可能会出错。此外,我添加了来自 datasets package的数据,但是您应该构建更多的测试用例来检查数据是否存在。

    library(闪亮)
    SET种子(1234)
    
    x<-sample.int(n=20)
    Y<-样本(X=字母,大小=20)
    a<-rnorm(n=20)
    B<-样本(X=字母,大小=20)
    
    df1<-data.frame(x=x,y=y)
    df2<-data.frame(A=A,B=B)
    
    mydataframes<-名称(unlist(eapply(.globalenv,is.data.frame)))
    opendata<-data()$结果[,3]
    
    定义UI
    ui<-流体页面(
    标题面板(“使用文本输入选择数据帧”),
    
    侧边栏布局(position=“left”,
    侧边栏面板(宽度=5,
    selectinput(“dfinput”,“选择数据帧”,
    #选择=mydataframes,
    
    list(“您的数据集”=c(mydataframes),
    “R数据集”=C(OpenData),
    
    
    selected=null)),
    
    主面板(宽度=6,
    h4(“这是您的数据”),
    textOutput(“选定的_-df”),
    数据表输出(“视图”)
    )
    
    )
    )
    
    
    #定义服务器逻辑----
    服务器功能(输入、输出、会话){
    
    输出$selected-renderText({
    粘贴(“您已选择”,输入$dfinput)
    })
    
    输出$view<。-
    可渲染({
    as.data.frame(get(input$dfinput))这将呈现选定的数据帧。如果用mtcars替换此数据集,则会正确呈现该数据集。
    })
    
    }
    
    
    #运行应用程序----
    Shinyapp(用户界面=用户界面,服务器=服务器)
    < /代码> 
    
    

    到selectInput所以你不需要输入任何东西,可能会出错。此外,我还添加了datasets但是,您应该构建更多的测试用例来检查数据是否存在

    library(shiny)
    set.seed(1234)
    
    x <- sample.int(n = 20)
    y <- sample(x = LETTERS, size = 20)
    a <- rnorm(n = 20)
    b <- sample(x = letters, size = 20)
    
    df1 <- data.frame(x = x, y = y)
    df2 <- data.frame(a = a, b = b)
    
    mydataframes <- names(which(unlist(eapply(.GlobalEnv,is.data.frame))))
    OpenData <- data()$results[,3]
    
    #Define UI ----
    ui <- fluidPage(
      titlePanel("Using text inputs to select dataframes"),
    
      sidebarLayout(position = "left",
                    sidebarPanel(width = 5,
                                 selectInput("dfInput","Select Dataframe",
                                   #choices = mydataframes,
    
                                   list("Your Datasets" = c(mydataframes),
                                        "R Datasets" = c(OpenData),
    
    
                                   selected=NULL))),
    
                    mainPanel(width = 6,
                              h4("Here's your data"),
                              textOutput("selected_df"),
                              dataTableOutput("view")
                    )
    
      )
    )
    
    
    # Define server logic ----
    server <- function(input, output, session) {
    
      output$selected_df <- renderText({
        paste("You have selected ", input$dfInput)
      })
    
      output$view <-
        renderDataTable({
          as.data.frame(get(input$dfInput)) # this should render the selected dataframe. If you replace this with mtcars then that dataset is correctly rendered.
        })
    
    }
    
    
    # Run the app ----
    shinyApp(ui = ui, server = server)
    

    enter image description here