有人,请指导我。假设我使用file.choose()选择数据文件的位置,然后加载数据集。另外,假设我已经通过电子邮件将脚本+数据集发送给我的朋友。当我的朋友下载文件并运行r脚本时,他必须选择文件的位置来运行脚本。我想知道当文件移动到另一台计算机时加载数据集的自动方式。
答案 0 :(得分:1)
首先,考虑一个"项目"目录中有脚本目录和数据目录。有一个名为rprojroot
的文件系统帮助程序可以帮助您编写与系统无关的代码,如果您有一个"项目,那么它将很有效。目录。 RStudio有一个项目概念和项目目录使这更容易。
其次,考虑使用公共或私人GitHub进行此项工作(脚本和数据)。如果数据是敏感数据,请将其设为私有存储库并根据需要授予访问权限。如果不是,那么分享就更容易了。您也可以通过这种方式获得数据和代码版本控制。
第三---作为GitHub的替代方案---考虑使用Keybase共享目录或git空格。您可以授予/删除对特定个人的访问权限,并且它们保持私密性和安全性,并且易于使用。
答案 1 :(得分:1)
这些解决方案可以在任何计算机上运行而无需更改脚本。
1)使用当前目录如果您假设数据和脚本位于同一目录中,那么这将适用于任何计算机,前提是用户首先执行setwd("/my/dir")
或启动R目录。一个使用source("myscript.R")
调用脚本,脚本使用read.table("mydata.dat")
读取数据。这种方法最简单,特别是如果脚本只使用一次或几次,然后再也不用了。
2)使用R选项稍微更通用的方法是假设R选项DATADIR(选择您喜欢的任何名称)包含该目录或当前目录(如果未定义)。在脚本中写:
datadir <- getOption("DATADIR", ".") # use DATADIR or . if DATADIR not defined
read.table(file.path(datadir, "mydata.dat"))
然后用户可以在他们的R会话或他们的.Rprofile中定义DATADIR:
options(DAtADIR = "/my/dir")
或者根本不定义它,但在运行脚本或在该目录中启动R之前,在其R会话中将其设置为该目录。
这可能比(1)更好,如果脚本将在很长一段时间内使用并在没有数据的情况下移动。如果您将。语句放在.Rprofile中,那么如果您长时间不使用该脚本并忘记其位置,它将有助于提醒您数据的位置。
3)在脚本中包含数据如果脚本始终使用相同的数据且数据不是太大,则可以在脚本中包含数据。使用dput(DF)
其中DF
是数据框,以便获得与DF
对应的R代码,然后将其粘贴到您的脚本中。这是一个示例脚本,我们使用dput(BOD)
的输出:
DF <- structure(list(Time = c(1, 2, 3, 4, 5, 7), demand = c(8.3, 10.3,
19, 16, 15.6, 19.8)), .Names = c("Time", "demand"), row.names = c(NA,
-6L), class = "data.frame", reference = "A1.4, p. 270")
plot(demand ~ Time, DF)
当然,如果您始终使用相同的数据,您可以创建一个包并包含脚本和数据。
4)配置包您可以使用配置包为脚本定义配置文件。这仍然是如何找到配置文件但是配置可以搜索配置文件的当前目录和所有祖先(父目录,祖父母目录等)的问题,因此可能不需要指定其位置。