我一直在尝试使用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})
}
答案 0 :(得分:3)
问题出在使用readGoogleSheet()
的{{1}}函数中,readLines()
调用url()
只支持Windows上的https
,这就是我在本地使用的内容。当然,谷歌是端到端的https
。
要让它运行我做了这个改变
+doc <- content(GET(url), as="text")
-doc <- paste(readLines(url), collapse=" ")
这似乎有效。我从@hrbmstr here
得到了一般的想法