我正在构建一个使用' twitteR'来下载推文的网络应用。 R包,修改这些推文,并通过闪亮的'显示它们。 R网络应用程序。执行下载和处理推文到数据框的代码没有问题:
do.call('rbind', lapply(userTimeline('nutwition_log'), as.data.frame))
...你可以自己在你的终端(加载了twitteR库)中运行它,并看到它下载推文数据并将结果数据框打印到屏幕上。
但是,当我在一个闪亮的'中使用这种电话时app(服务器端)......例如......
server.R:
library(shiny)
library(twitteR)
shinyServer(function(input, output) {
datasetInput <- reactive(function() {
tweets <- userTimeline(input$subscriber)
do.call('rbind', lapply(tweets, as.data.frame))
})
output$view <- reactiveTable(function() {
head(datasetInput(), n = input$obs)
})
})
ui.R:
library(shiny)
library(twitteR)
shinyUI(pageWithSidebar(
headerPanel('FitnessTrack'),
sidebarPanel(
selectInput("subscriber", "Select Subscriber:",
choices = c("nutwition_log", "anotherAccount")),
numericInput("obs", "Number of observations to view:", 10)
),
mainPanel(
tableOutput("view")
)
))
...我收到以下错误:
Error in as.data.frame.default(X[[1L]], ...) :
cannot coerce class 'structure("status", package = "twitteR")' into a data.frame
Error in as.data.frame.default(X[[1L]], ...) :
cannot coerce class 'structure("status", package = "twitteR")' into a data.frame
Error in as.data.frame.default(X[[1L]], ...) :
cannot coerce class 'structure("status", package = "twitteR")' into a data.frame
...我想做的就是能够更改正在下载和发送推文的用户,然后输出结果数据框(... datasetInput()
返回,加载到{{1} })到output$view
。我不知道为什么这不起作用。
任何帮助都会很棒!
答案 0 :(得分:10)
我想我已经得到了它:https://github.com/rstudio/shiny/commit/0b469f09df7e2ca3bbdb2ddadc8473a8126a9431
在对此进行适当测试并将其转换为新的Shiny版本之前,您可以使用devtools直接从GitHub进行测试:
library(devtools)
install_github('shiny', 'rstudio')
谢谢,很高兴能修好那个!
答案 1 :(得分:6)
我不确定这是不是一个错误,但这里肯定有一些奇怪的事情,Joe Cheng和他的合作。我想知道。它的工作原理如下:
server.R
library(shiny)
library(twitteR)
shinyServer(function(input, output) {
datasetInput <- reactive(function() {
tweets <- userTimeline(input$subscriber)
tmp <- lapply(1:length(tweets),function(x) data.frame(
text=tweets[[x]]$text,
created=tweets[[x]]$created,
screename=tweets[[x]]$getScreenName()))
do.call(rbind,tmp)
})
output$view <- reactiveTable(function() {
head(datasetInput(), n = input$obs)
})
})
所以这不是data.frames的问题,而是与twitteR为引用类status
的对象设置方法的方式有关。通过访问器引用字段来运行完全相同的代码似乎运行得很好。
感觉像“又一个S4 /参考类之谜”。