我知道您可以在Google文档上发布电子表格,然后在R中导入它们。但是,假设我有一个函数或一些我想在R中读取的代码(就像在源函数中一样)。例如,您如何读取存储在Google文档中的所有代码?
https://docs.google.com/document/edit?id=1f11rcVs9AtVcgOyiP0lV04yq9hshVDIPx93lA0ItFvQ
我认为这不会发表,但只是举个例子。
基本上我想:
在R中创建一个函数(为了比较,请参见下面的示例)
在Google文档上传,并与拥有此链接的任何人共享,以便我无需通过R或Google文档等登录...
通过source()之类的命令读取它,无论我想要什么
我的兴趣不是阅读数据,而是阅读功能。当我不在同一台计算机/服务器上时,它会更快地导入我自己的功能。
有什么想法吗?
非常感谢
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)
}
答案 0 :(得分:8)
对于这种情况,我建议使用Github或类似的东西。
推荐Github的几个原因:
devtools
包安装在R中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。但是使用RGoogleDocs
和XML
包,我们可以解析代码(我不是很有经验),使用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(" ", " ", 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)
答案 3 :(得分:1)
有一个包RGoogleDocs,支持上传和下载文件。下载文件后,您可以使用source
进行阅读。