Google文档中的R代码

时间:2012-08-11 08:24:30

标签: r google-docs google-docs-api google-drive-api

我知道您可以在Google文档上发布电子表格,然后在R中导入它们。但是,假设我有一个函数或一些我想在R中读取的代码(就像在源函数中一样)。例如,您如何读取存储在Google文档中的所有代码?

https://docs.google.com/document/edit?id=1f11rcVs9AtVcgOyiP0lV04yq9hshVDIPx93lA0ItFvQ

我认为这不会发表,但只是举个例子。

基本上我想:

  1. 在R中创建一个函数(为了比较,请参见下面的示例)

  2. 在Google文档上传,并与拥有此链接的任何人共享,以便我无需通过R或Google文档等登录...

  3. 通过source()之类的命令读取它,无论我想要什么

  4. 我的兴趣不是阅读数据,而是阅读功能。当我不在同一台计算机/服务器上时,它会更快地导入我自己的功能。

    有什么想法吗?

    非常感谢

    P.S。来自statsmethods.net的函数示例

    mysummary <- function(x,npar=TRUE,print=TRUE) {
      if (!npar) {
        center <- mean(x); spread <- sd(x) 
      } else {
        center <- median(x); spread <- mad(x) 
      }
      if (print & !npar) {
        cat("Mean=", center, "\n", "SD=", spread, "\n")
      } else if (print & npar) {
        cat("Median=", center, "\n", "MAD=", spread, "\n")
      }
      result <- list(center=center,spread=spread)
      return(result)
    }
    

4 个答案:

答案 0 :(得分:8)

对于这种情况,我建议使用Github或类似的东西。

推荐Github的几个原因:

  • 版本控制
  • 代码突出显示
  • 协作
  • 能够在Github上开发和托管R包,其他人可以使用devtools包安装在R中
  • 简单的URL方案,可以轻松使用source()加载功能

将功能发布到Github后,您可以按照以下方式轻松加载:

require(RCurl)
baseURL = c("https://raw.github.com/--username--/--repo-name--/master/")
source(textConnection(getURL(paste0(baseURL, "path-to-scripts/script-name.R"))))

当然,您可以轻松地将其包装到函数中,而不必在每个R会话中输入它,或者尝试devtools包中的某些选项。

如果你这么做,你可能想学习制作一个R包并在Github上托管它。如果您只需要偶尔执行此操作,则可以考虑使用“github:gist”。每个“要点”都会分配一个数字ID,然后可以使用source_gist()包中的devtools轻松获取,如下所示:

source_gist("gist-id-number")

很难击败,但你必须记下你的功能的ID号,或者把你所有的功能都放在一个文件中并记住一个ID号......


不会推荐类似Google Docs的代码来编写代码的原因是,使用“文字处理器”类型软件通常是一个可怕的想法,因为它们可能会引入隐藏的字符这将使您的文件难以获取。此外,纯文本版本的URL是一个非常模糊的,你将无法记住....

顺便说一句,可能获取您在帖子中链接到的文件的“txt”版本,但我无法source()它 - 我必须在文本编辑器中打开它并将其复制并粘贴到R.这是因为文件编码似乎是“UTF-8(带BOM)”。那里的任何人都有关于如何处理的提示?

答案 1 :(得分:8)

最容易使用Dropbox完成 - 请参阅此处http://thebiobucket.blogspot.co.at/2012/05/source-r-script-from-dropbox.html

像这样:

source("http://dl.dropbox.com/s/c18lcwnnrodsevt/test_dropbox_source.R")

但你可以使用Googledocs,就像这里http://thebiobucket.blogspot.co.at/2011/11/how-to-run-r-scripts-directly-out-of.html#more

一样
library(RCurl)
setwd(tempdir())
destfile = "test_google_docs.txt"
x = getBinaryURL("https://docs.google.com/uc?export=download&id=0B2wAunwURQNsMDViYzllMTMtNjllZS00ZTc4LTgzMzEtNDFjMWQ3MTUzYTRk", followlocation = TRUE, ssl.verifypeer = FALSE)
writeBin(x, destfile, useBytes = TRUE)
source(paste(tempdir(), "/test_google_docs.txt", sep = ""))

答案 2 :(得分:4)

我还认为最好的方法是使用github或dropbox。但是使用RGoogleDocsXML包,我们可以解析代码(我不是很有经验),使用XML解析可能会有人拥有更好的代码。

### require(devtools);dev_mode(TRUE, .libPaths()[1]);install_github("RGoogleDocs", "duncantl")
require(RGoogleDocs) 
require(XML)

auth <- getGoogleAuth("dicko.ahmadou@gmail.com", "*********")

con <- getGoogleDocsConnection(auth)

mydoc <- getDocs(con)

## I put star for confidentiality
## Your doc is in 10th position
names(mydoc)

##  [1] "*********"                                 
##  [2] "*********"                             
##  [3] "panel_tp_transferts"                                      
##  [4] "txint"                                                    
##  [5] "avortementsuivisen"                                       
##  [6] "Untitled Document"                                        
##  [7] "copie de villages_emprise10km"
##  [8] "AéroportBlaiseDiagne_AFDB.pdf"                            
##  [9] "strassen_eng.pdf"                                         
## [10] "R_script_CO2_emissions_airborne"  


rcode <- mydoc[[10]]
rcode <- getDocContent(rcode, con)
## remove Non break space in the document (there are plenty of them...)
rcode <- gsub("&nbsp;", " ", rcode)
rcode <- htmlParse(rcode, asText = TRUE)
rcodecontent <- xpathApply(rcode, "/html//body//p//span")
rcodecontent <- sapply(rcodecontent, function(x) unname(xmlSApply(x, xmlValue))

现在我们可以将代码保存在文件中

### save the script in my dropbox folder (dropbox is very easy to use...)
cat(sapply(rcodecontent, function(x) paste(x, "\n")), 
       file = "/home/ahmadou/Dropbox/Public/code.R")

### retrieve the public link
oldwd <- getwd()
setwd("/home/ahmadou/Dropbox/Public")
system('dropbox puburl code.R', intern = TRUE)
[1] "https://dl.dropbox.com/u/8750577/code.R"

setwd(oldw)

以下是link for the code

答案 3 :(得分:1)

有一个包RGoogleDocs,支持上传和下载文件。下载文件后,您可以使用source进行阅读。