连接到Google Spreadsheets无法在Shiny Server中打开

时间:2014-09-05 12:16:18

标签: r shiny-server

我一直在尝试使用Shiny来使用here函数阅读和分析新格式的Google电子表格。

这在本地工作正常,但在我部署到shinyapps.io时没有。

一个问题是在绝对路径测试中存在误报的已知问题,但这可以通过在控制台中强制部署来解决。但是一旦上传,我就会收到带有此错误的javascript转储提醒

label, label<-Error in file(con, "r") : cannot open the connection

我环顾四周,我可以看到人们因为很多原因而得到javascript错误转储,而我最接近的人是需要使用RCurl的地方,但这并没有帮助我。我也知道我在网址中有https,所以这不是问题。我正在阅读的电子表格肯定会发布到网上;任何明显的东西都会使它无法在本地运作。

更新:我将在这里复制这些功能的代码。

library(XML)

cleanGoogleTable <- function(dat, table=1, skip=0,

ncols=NA, nrows=-1, header=TRUE, dropFirstCol=NA){  

if(!is.data.frame(dat)) {

    dat <- dat[[table]]   }   if(is.na(dropFirstCol)) {
    firstCol <- na.omit(dat[[1]])
    if(all(firstCol == ".") || all(firstCol== as.character(seq_along(firstCol)))) {

      dat <- dat[, -1]
    }   } else if(dropFirstCol) {
    dat <- dat[, -1]   }   if(skip > 0){
    dat <- dat[-seq_len(skip), ]   }   if(nrow(dat) == 1) return(dat)   if(nrow(dat) >= 2){
    if(all(is.na(dat[2, ]))) dat <- dat[-2, ]   }   if(header && nrow(dat) > 1){
    header <- as.character(dat[1, ])
    names(dat) <- header
    dat <- dat[-1, ]   }   # Keep only desired columns   if(!is.na(ncols)){

    ncols <- min(ncols, ncol(dat))
    dat <- dat[, seq_len(ncols)]   }   # Keep only desired rows   if(nrows > 0){
    nrows <- min(nrows, nrow(dat))
    dat <- dat[seq_len(nrows), ]   }   # Rename rows   rownames(dat) <- seq_len(nrow(dat))   dat }

readGoogleSheet <- function(url, na.string="", header=TRUE){
  stopifnot(require(XML))
  # Suppress warnings because Google docs seems to have incomplete final line
  suppressWarnings({
    doc <- paste(readLines(url), collapse=" ")
  })
  if(nchar(doc) == 0) stop("No content found")
  htmlTable <- gsub("^.*?(<table.*</table).*$", "\\1>", doc)
  ret <- readHTMLTable(htmlTable, header=header, stringsAsFactors=FALSE, as.data.frame=TRUE)
  lapply(ret, function(x){ x[ x == na.string] <- NA; x})
}

1 个答案:

答案 0 :(得分:3)

问题出在使用readGoogleSheet()的{​​{1}}函数中,readLines()调用url()只支持Windows上的https,这就是我在本地使用的内容。当然,谷歌是端到端的https

要让它运行我做了这个改变

 +doc <- content(GET(url), as="text")
 -doc <- paste(readLines(url), collapse=" ")

这似乎有效。我从@hrbmstr here

得到了一般的想法