我正在尝试编写一个Shiny应用程序,需要在开始可视化之前先操作我的数据。我有三个输入来操纵数据。 1.频道 2.排除一个字 3.查找包含此词的所有评论
我能够完成前两个但是当使用grep()函数来查找包含某个单词的所有行时,我遇到了以下错误 “cat中的错误(列表(...),文件,sep,fill,labels,append): 参数1(类型'list')不能由'cat'“
处理任何人都知道如何处理这个问题?究竟是什么导致了它?我认为是grep()函数使用列表来告诉我哪些行包含该单词。但是我不确定是否可以解决这个问题,并且花费了很多时间来处理这个问题
请在下面找到我的两段代码;
fluidPage(
titlePanel("Groupon Word Cloud"),
sidebarLayout(
sidebarPanel(
selectInput( inputId = "selection",
label = "Choose a Supply Channel",
choices = c('All',
'G1',
'Getaways',
'Goods',
'Live',
'National',
'N/A',
'MM'),
selected = 'All'),
hr(),
textInput( inputId = "exclude",
label = "Exclude a word"),
textInput( inputId = "drill",
label = "Drill down into a word"),
submitButton( text = "Update"),
hr(),
dateRangeInput( inputId = "date",
label = "Date Range",
start = "2015-02-01",
end = NULL ,
min = '2015-02-01',
max = NULL,
format = "yyyy-mm-dd",
startview = 'month',
weekstart = 0,
language = "en",
separator = "to"),
sliderInput( inputId = "freq",
label ="Minimum Frequency:",
min = 1,
max = 50,
value = 15),
sliderInput( inputId = "max",
label = "Maximum Number of Words:",
min = 1,
max = 300,
value = 100)),
# Show Word Cloud
mainPanel(
tableOutput('table')
)
) )
library(shiny)
source('data/lappend.r')
#Load and manipulate data on App opening
survey_data <- read.delim(file = "data/Survey_Monkey_3_1_2015.txt"
, header = TRUE
, sep = "|"
, quote = ""
, stringsAsFactors = FALSE)
survey_data <- subset(survey_data, survey_data$Misc_Text_Feedback != '?')
survey_data <- survey_data[,c(2,6)]
stopWords <- read.csv (file = 'data/stop_words.csv')
stopWords <- as.character(stopWords[,2])
shinyServer(
function(input, output) {
#Data subset based on Supply Channel Selection
data <- reactive({
if (input$selection == 'All') {
if(input$drill==""){
survey_data
} else {
drill <- survey_data
drill <- grep(input$drill, drill$Misc_Text_Feedback, value = TRUE)
}
} else {
if(input$drill==""){
subset(survey_data, survey_data$Supply_Channel == input$selection )
} else {
drill <- subset(survey_data, survey_data$Supply_Channel == input$selection)
drill <- grep(input$drill, drill$Misc_Text_Feedback)
}
}
})
stops <- reactive({
stopWords <- lappend(stopWords, input$exclude)
return(stopWords)
})
#Table
output$table <- renderText({
data <- data()
head(data, n = 300)
})
})
非常感谢您提供的任何帮助或对我当前代码的评论。我还提供了一个函数,用于将单词追加到下面列出的列表中
lappend <- function(lst, obj) {
lst[[length(lst)+1]] <- obj
return(lst)
}
我的数据的头部如下所示
道歉上面的格式不佳。
答案 0 :(得分:4)
根据我的经验,错误argument 1 (type 'list') cannot be handled by 'cat'
来自于将列表传递给render ...()命令。我的猜测是你将一个列表传递给server.r。
output$table <- renderText({
此外,我见过的renderText()
的所有示例只呈现一行文字。如果你想渲染多行,请尝试renderUI()
,它也可以处理某些类型的列表,例如Shiny自己的tagList()
。
答案 1 :(得分:3)
我今天遇到了这个错误。
解决方案:输出$ something语句末尾缺少})
。
编译时没有显示为错误,因此很难发现。
答案 2 :(得分:2)
唯一的问题是你使用renderText()
,但你有多行输出。
您可以使用renderUI()
代替
答案 3 :(得分:2)
只是为了注册(也许对某人有用)。我遇到了同样的问题,对我来说解决方法是将var (mytime1, mytime2) = runTimes.Split(',');
更改为renderText
。
但在我的情况下,我试图总结renderPrint
。
答案 4 :(得分:1)
当您在服务器中创建renderText
并填充一些 html 标记时会抛出此错误(例如:{{1} }),而不是一行标准文本。
删除标记,错误可能会消失。