【发布时间】:2020-01-04 21:52:05
【问题描述】:
Shiny 应用使用 fileInput() 加载一个 .csv,但不能在后面更改它。
我想在识别列后使用按钮更改(乘以 (-1))应用程序中数据框的其中一列
对象 loadedData 是一个 read.csv() 函数,它输出我在应用程序的其余部分中使用的数据帧我尝试通过函数直接更改对象,无论是响应数据还是尝试的静态副本稍后覆盖,但似乎无法使更改永久化。
#--------------UI side
#import data
sidebarLayout(
sidebarPanel(
fileInput('main', 'Input file', multiple = FALSE,
accept =".csv"),
checkboxInput("header", "Header", TRUE),
radioButtons("sep", "Separator",
choices = c(Comma = ",",
Semicolon = ";",
Tab = "\t"),
selected = ","),
radioButtons("quote", "Quote",
choices = c(None = "",
"Double Quote" = '"',
"Single Quote" = "'"),
selected = '"')
),
#--------------Server Side
# read dataset
loadedData <- reactive({
read.csv(
input$main$datapath,
header = input$header,
sep = input$sep,
quote = input$quote
)
})
# change signal
observeEvent(input$main, {
output$advancedsignalchange <- renderUI({
tagList(
selectInput('signalchangecolumn', 'Signal Change Column', choices = names(loadedData())),
actionButton('signalchange','Submit signal change')
)
})
})
observeEvent(input$signalchange,{
print(loadedData)
print(names(loadedData()))
aa <- as.array(input$signalchangecolumn)
print(loadedData()[aa][[1]][1]) #token value before change
#loadedData()[aa] <- loadedData()[aa] *-1 ## can't override
print(loadedData()[aa] *-1) #change
print(loadedData()[aa][[1]][1]) #token value after change
})
这里有 2 个错误: 如果我取消注释此行以尝试覆盖loadedData()
loadedData()[aa] <- loadedData()[aa] *-1
警告:
如果我尝试类似
loadedData[aa] <- loadedData()[aa] *-1
警告:
所以我无法保存更改
打印语句是一种验证语法的方法,因此,假设我有一列第一个值为“1”,输出将是,
1
-1(连同该列的其余部分)
1
因此更改操作的语法本身是可行的,但我无法覆盖导入数据帧上的列
【问题讨论】:
-
包含重现您的问题/错误的最少代码将使人们更容易提供帮助。另请参阅有关调试和编写闪亮示例的此线程:community.rstudio.com/t/shiny-debugging-and-reprex-guide/10001