r - 在 r shiny 中创建新变量 = 现有变量 + 用户输入
问题描述
我正在为我学校的学生成绩开发一个应用程序。
在将某些数字添加到每个学生的成绩后,我想查看失败与通过的摘要。
下面的一个例子
library(shiny)
biology_num <- c(49,64,74,84)
biology_pass_fail <- ifelse(biology_num < 50, "Fail", "Pass")
First <- data.frame(cbind(biology_num,biology_pass_fail))
First$biology_num <- as.numeric(as.character(First$biology_num))
用户界面
ui <- fluidPage(
selectInput("Subject",
"Choose Subject",
choices=list("biology")),
numericInput("Addition","If we added","1"),
tableOutput("table"),
tableOutput("table2")
)
服务器 这是问题
server <- shinyServer(function(input,output){
#Here I want to create a new dataframe that combines
#the existing grades + the potential add
New_biology <- reactive({
as.data.frame(cbind(New_biology_num+input$Addition))
New_biology$New_biology_pass_fail <-
as.factor(ifelse(New_biology$New_biology_num <50,"Fail","Pass"))
})
output$table <- renderTable(as.table(summary(First$biology_pass_fail)))
output$table2 <- renderTable(as.table(summary({New_biology$New_biology_pass_fail()})))
}
)
shinyApp(ui,server)
然后我收到错误
“闭包”类型的对象不可子集
我传递New_biology$New_biology_pass_fail
给公式的方式有问题,output$table2
或者可能在reactive
公式中。
非常感谢您的指导!
解决方案
这似乎以您希望的方式工作:
library(shiny)
biology_num <- c(49, 64, 74, 84)
biology_pass_fail <- ifelse(biology_num < 50, "Fail", "Pass")
# DON'T call data.frame(cbind()). Just use data.frame()!
First <- data.frame(biology_num, biology_pass_fail)
ui <- fluidPage(
selectInput("Subject",
"Choose Subject",
choices=list("biology")),
numericInput("Addition","If we added","1"),
tableOutput("table"),
tableOutput("table2")
)
server <- function(input,output) {
New_biology <- reactive({
New_biology_num <- biology_num + input$Addition
data.frame(New_biology_num,
New_biology_pass_fail = as.factor(ifelse(New_biology_num < 50, "Fail", "Pass")))
})
output$table <- renderTable(First)
output$table2 <- renderTable(New_biology())
}
shinyApp(ui, server)
重要的是要知道反应元素是函数。因此,如果您创建了一个反应元素(在这种情况下New_biology
),您需要将它作为一个函数调用,以便它返回一个值(即New_biology()
)。如果一个反应元素返回一个data.frame,并且你想访问一个特定的列,你需要在函数调用之后应用访问器(例如New_biology()$New_biology_pass_fail
)。
推荐阅读
- apache-spark - 运行多个 Hive / map reduce 作业 - 杀死 TempletonController 作业
- python - 4维矩阵的3维同时求和
- corda - Corda 中的州唯一标识
- java - Java 8 中的不干涉示例
- css - 如何编辑 Firefox 阅读器视图的 CSS / 样式
- android - 文本大小 AppBar / NavBar 辅助功能
- java - 发送电子邮件后如何敬酒?
- spring - 选择带有弹簧数据的自引用表到新对象中
- react-native - 从导航标题返回屏幕时出错:未定义不是对象(评估“this.props.navigation.navigate”)
- python - Sympy 符号微分