在R中的闪亮应用程序中创建一个循环

时间:2016-06-10 09:57:34

标签: r for-loop shiny

我想在我的闪亮应用程序中运行一个循环,以便计算一个新变量并将其添加到反应式数据框中。 Flux_Data是根据用户过滤更新的反应数据帧。然后在循环中使用该数据帧来计算新变量。然后应将新变量添加到数据框中。我试图在服务器文件中实现它,但我有一条错误消息。 Warning: Error in for: invalid for() loop sequence任何人都知道我做错了什么?如果您需要ui文件和原始数据帧的子集,请告诉我。

更新

shinyServer(function(input, output, session) {

Update_df1 <- reactive({

  # Lables for axes
  xvar_name <- names(axis_vars)[axis_vars == input$xvar]
  yvar_name <- names(axis_vars)[axis_vars == input$yvar]
  xvar <- prop("x", as.symbol(input$xvar))
  yvar <- prop("y", as.symbol(input$yvar))

  Flux_Data_df %>%
    filter(
      Gap_filled >= input$Gap_filled[1] & 
      Gap_filled <= input$Gap_filled[2] &
      Uncert > input$Uncert[1] & 
      Uncert < input$Uncert[2] &
      Stand_Age >= input$Stand_Age[1] & 
      Stand_Age <= input$Stand_Age[2] &
      GPP > input$GPP[1] & 
      GPP < input$GPP[2] &
      MAT > input$MAT[1] & 
      MAT < input$MAT[2] &
      MAP > input$MAP[1] & 
      MAP < input$MAP[2]) %>%
    filter(
      Management %in% input$Management &
      Disturbance %in% input$Disturbance &
      Climate %in% input$Climate &
      Ecosystem %in% input$Ecosystem) %>% as.data.frame()
})

# A reactive expression to add model predicion to a new dataframe
Update_df2<- reactive({
    for(id in unique(Update_df1$Site_ID)){
      lm.Age<- try(nlsLM(NEP~offset + A*(1-exp(k*Stand_Age)), data = Update_df1[Update_df1$Site_ID != id,], 
                         start = list(A=  711.5423, k= -0.2987, offset= -444.2672),
                         lower= c(A = -Inf, k =  -Inf, offset= -1500), control = list(maxiter = 500), weights = 1/Uncert), silent=TRUE);
      Update_df1$f_Age[Update_df1$Site_ID == id] <- predict(object = lm.Age, newdata = Update_df1[Update_df1$Site_ID == id,])
    } 

  for(id in unique(Update_df1$Site_ID)){
    lm.NEP<- lm(NEP~ (f_Age + Stand_Age + GPP)^2 +
                  Clay_1km + GPP:MAP + SPI_CRU_Mean:NHx + Stand_Age:NHx ,
                data=Update_df1[Update_df1$Site_ID != id,], weights = 1/Uncert)
    Update_df1$prediction[Update_df1$Site_ID == id] <- predict(object = lm.NEP, newdata = Update_df1[Update_df1$Site_ID == id,])
  }
})

0 个答案:

没有答案