2013-06-12 34 views
2

我想在另一個變量有條件計算的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 

這是我的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") 
) 
) 
) 

這是我的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 
    }) 

}) 

使用此閃亮代碼,我收到以下錯誤:

Error in mydata$z[mydata$y >= 5] <- reactive({ : invalid type/length (closure/0) in vector allocation

我已經嘗試了子集和分配的不同方式,但我被卡住了。非常感謝您的幫助!

回答

6

我不確定你是否清楚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() 
    }) 

}) 
+0

正是我在找的東西。非常有幫助,謝謝! – dadrivr