5

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

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

我不认为这已经发布,但这只是为了举例说明。

基本上我想:

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

  2. 将其上传到 Google Docs 并与任何知道链接的人分享,这样我就不必通过 R 或 Google Docs 等登录...

  3. 在我想要的任何地方通过诸如 source() 之类的命令读取它

我的兴趣不是读取数据,而是读取函数。当我不在同一台计算机/服务器上时,它可以更快地导入我自己的函数。

有任何想法吗?

非常感谢

PS 来自 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

4 回答 4

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”。每个“gist”都分配有一个数字 ID,然后可以轻松地source_gist()devtools包中获取该 ID,如下所示:

source_gist("gist-id-number")

很难做到这一点,但是您必须记下函数的 ID 号,或者将所有函数放在一个文件中并记住一个 ID 号......


推荐使用 Google Docs 之类的东西来编写代码的原因是,将“文字处理器”类型的软件用于此类目的通常是一个糟糕的主意,因为它们可能会引入隐藏字符,从而使您的文件难以获取。此外,纯文本版本的 URL 非常晦涩,您将无法记住......

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

于 2012-08-11T09:46:36.837 回答
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 = ""))
于 2012-08-11T12:55:11.060 回答
4

我也认为最好的方法是使用 github 或 dropbox。但是使用RGoogleDocsandXML包我们可以解析代码(我不是很有经验)用 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)

这是代码的链接

于 2012-08-11T10:56:14.300 回答
1

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

于 2012-08-11T09:56:00.107 回答