我想在我的闪亮应用程序中运行一个循环,以便计算一个新变量并将其添加到反应式数据框中。 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,])
}
})