我试图在Shiny中的数据框中计算一个新变量,该变量是在另一个变量上有条件地计算的.
这是我正在尝试做的一个小例子:
mydata <- data.frame(cbind(x = 1, y = 1:10))
value <- 10 #from user input
mydata$z[mydata$y >= 5] <- mydata$y[mydata$y >= 5] + value
mydata$z[mydata$y < 5] <- mydata$y[mydata$y < 5] - value
Run Code Online (Sandbox Code Playgroud)
这是我的ui.R文件:
#Library
library("shiny")
# Define UI for miles per gallon application
shinyUI(pageWithSidebar(
# Application title
headerPanel("Test"),
sidebarPanel(
numericInput("value", "Enter Value:", 10)
),
mainPanel(
tableOutput("table")
)
)
)
Run Code Online (Sandbox Code Playgroud)
这是我的server.R文件:
#Libraries
library(shiny)
#Load Data
mydata <- data.frame(cbind(x = 1, y = 1:10))
# Define server logic
shinyServer(function(input, output) {
mydata$z[mydata$y >= 5] <- reactive({
mydata$y + input$value
})
mydata$z[mydata$y < 5] <- reactive({
mydata$y - input$value
})
output$table <- renderTable({
mydata
})
})
Run Code Online (Sandbox Code Playgroud)
有了这个闪亮的代码,我收到以下错误:
mydata $ z [mydata $ y> = 5] < - reactive({:向量分配中的无效类型/长度(闭包/ 0)错误
我已经尝试了不同的子集和分配方法,但我被卡住了.非常感谢您的帮助!
我不确定你是在清楚reactive()做什么...我建议你阅读更多的shiny文档,特别是看看这些例子 - '03_reactivity'可能是一个很好的例子.
无论如何,这里是您的代码如何适应您想要的.这不是最好的方法,但希望它能帮助您了解目前存在问题的地方.
我只更改了server.R文件,并且没有更改任何代码来构建新变量.构造新变量的代码进入reactive函数内部- 然后需要调用函数来实际创建表.
#Libraries
library(shiny)
#Load Data
mydata <- data.frame(cbind(x = 1, y = 1:10))
# Define server logic
shinyServer(function(input, output) {
newdata <- reactive({
mydata$z[mydata$y >= 5] <- mydata$y[mydata$y >= 5] + input$value
mydata$z[mydata$y < 5] <- mydata$y[mydata$y < 5] - input$value
return(mydata)
})
output$table <- renderTable({
newdata()
})
})
Run Code Online (Sandbox Code Playgroud)