csv の編集を自動化しようとしています。Shiny アプリのユーザーが、csv でクリーンアップするオプションを選択できるようにしたいと考えています。明確にするために、1 つのボタンをクリックして csv を更新し、別のボタンをクリックして、元の更新を維持しながら再度更新できるようにしたいと考えています。現在、ボタンが 2 つだけの場合を検討しています。最初に [読み込み] ボタンをクリックして、csv を読み込んで表示します。次に、「Email Cleaned」ボタンをクリックして、クリーンアップされた電子メールの新しい列を追加します。最終的には、もっとボタンを追加したいと思っています。
私のコードは現在、次のエラーでクラッシュしています:
.getReactiveEnvironment()$currentContext() のエラー: アクティブなリアクティブ コンテキストがないと、操作は許可されません。(リアクティブ式またはオブザーバー内からのみ実行できることを実行しようとしました。)
私のコードは次のとおりです。
うい
ui = fluidPage(
sidebarPanel(
fileInput('file1', 'Choose file to upload',accept = c('text/csv','text/comma-separated-values','text/tab-separated-values','text/plain','.csv','.tsv')),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',c(Comma=',',Semicolon=';',Tab='\t'),'Comma'),
radioButtons('quote', 'Quote',c(None='','Double Quote'='"','Single Quote'="'"),'Double Quote'),
actionButton("Load", "Load File"),
actionButton("Email", "Clean Email")),
mainPanel(tableOutput("my_output_data"))
)
サーバ
server = function(input, output) {
###Load CSV File
data1 <- reactive({
if(input$Load == 0){return()}
inFile <- input$file1
if (is.null(inFile)){return(NULL)}
isolate({
input$Load
my_data <- read.csv(inFile$datapath, header = input$header,sep = input$sep, quote = input$quote,stringsAsFactors =FALSE)
})
my_data
})
output$my_output_data <- renderTable({data1()},include.rownames=FALSE)
data2 <- reactive({
if(input$Email == 0){return()}
inFile <- input$file1
if (is.null(inFile)){return(NULL)}
isolate({
input$Email
my_data <- read.csv(inFile$datapath, header = input$header,sep = input$sep, quote = input$quote,stringsAsFactors =FALSE)
###CLEAN EMAIL BUTTON FORMULA
email_clean <- function(email, invalid = NA)
{
email <- trimws(email)
email[(nchar(email) %in% c(1,2)) ] <- invalid
email[!grepl("@", email)] <- invalid
bad_email <- c("\\@no.com", "\\@na.com","\\@none.com","\\@email.com",
"\\@noemail.com", "\\@directcapital.com", "\\@test.com",
"noemail")
pattern = paste0("(?i)\\b",paste0(bad_email,collapse="\\b|\\b"),"\\b")
email <-gsub(pattern, invalid, sapply(email,as.character))
unname(email)
}
Cleaned_Email <- email_clean(my_data$Email)
my_data<-cbind(my_data,Cleaned_Email)
})
my_data},
{
if(input$Load == 0){return()}
inFile <- input$file1
if (is.null(inFile)){return(NULL)}
isolate({
input$Load
my_data <- read.csv(inFile$datapath, header = input$header,sep = input$sep, quote = input$quote,stringsAsFactors =FALSE)
})
my_data}
)
output$my_output_data <- renderTable({data2()},include.rownames=FALSE)
}
shinyApp(ui = ui, server = server)
ありがとうございました!