在数据帧Shiny R中插入列



我有一个数据框架,需要能够使用Shiny插入列。函数filedata读取一个名为filedata((的数据集。

filedata <- reactive({
req(input$file_selector)
read.csv(paste0(parseDirPath(c(home = 'C:\Users\Ruben'), file_dir()),'\',input$file_selector),skip=1)
})
output$filetable <- renderDataTable({
filedata()
})

当用户选中一个框,询问他/她是否希望插入新列时,就会运行此代码。但是,我得到了一个";赋值左侧无效(NULL(";错误我在很多方面都尝试过,但我不知道什么地方做得不对。这个代码出了什么问题?

输入$qc_final_cols是复选框id。

df <- reactive({
if (input$qc_final_cols){
var_names = c('TA','PP','US','UD','UE','UG','UH','XR','RW','PA','TB4','TV2','TV4',
'TV8','TV20','TV40','MV2','MV4','MV8','MV20','MV40','VB','TA40','TA120','SD')
output$column_names <- renderText(var_names)
for (v in 1:length(var_names)){
ind <- which(colnames(filedata()) == var_names[v])
filedata() <- filedata() %>% add_column(z = NA,.after = ind)
colnames(filedata())[ind+1] <- paste0(var_names[v],'_QC')
filedata() <- filedata() %>% add_column(y = NA,.after = ind+1)
colnames(filedata())[ind+2] <- paste0(var_names[v],'_Final')
}
}
})
output$filetable <- renderDataTable({
df()})  

问题可能与filedata() <- filedata()...有关,其中filedata()是反应式表达式。该分配可能会导致错误。

考虑创建一个包含数据的reactiveValues对象(rv(,您可以在其中添加列、更改列名等。请注意将用于读取文件的observe的使用,并将数据帧(df(分配给rv

如果选中该框,可能会调用observeEvent表达式,并且可以在其中添加列。请注意,您不需要将output$column_names放入其中,因为它将自动更新。

如果这不起作用,或者没有帮助,请告诉我。然而,如果你能够提供一个完整但可重复性最小的例子,这可能会更有帮助。

server <- function(input,output){

var_names = c('TA','PP','US','UD','UE','UG','UH','XR','RW','PA','TB4','TV2','TV4',
'TV8','TV20','TV40','MV2','MV4','MV8','MV20','MV40','VB','TA40','TA120','SD')

rv <- reactiveValues(df = NULL)

#This function is responsible for loading in the selected file
observe({
req(input$file_selector)
rv$df <- read.csv("test9820.csv") # Simplified for testing
})

# This previews the CSV data file
output$filetable <- renderDataTable({
rv$df
})

observeEvent(input$qc_final_cols, {

if (input$qc_final_cols){
for (v in 1:length(var_names)){
ind <- which(colnames(rv$df) == var_names[v])
rv$df <- rv$df %>% 
add_column(z = NA,.after = ind)
colnames(rv$df)[ind+1] <- paste0(var_names[v],'_QC')
rv$df <- rv$df %>% 
add_column(y = NA,.after = ind+1)
colnames(rv$df)[ind+2] <- paste0(var_names[v],'_Final')
}
}
})

}

最新更新