小编jam*_*mse的帖子

如何存储需要从多个 R 项目访问的数据,同时保留代码可移植性?

如何存储需要从多个 R 项目访问的数据,同时保留代码可移植性?

在我正在使用 R 进行的项目中,我可以访问存储在系统上几乎任何位置的数据。但如果它位于项目之外的任意位置,则会妨碍代码的可移植性。

我有一些项目希望能够在两台不同的机器上使用不同的目录设置进行工作。对于可以存储在项目中的数据,这可以很好地工作,因为我可以使用工具,例如将项目设置为 RStudio 项目并使用包here来引用数据的位置。

但是,我有一些数据(a)我想在多个项目中使用并且(b)非常大。因此,我不想将它复制到我可能使用它的所有项目中。

对于只有我正在处理的项目,我可以通过至少相对于项目设置一致的文件夹结构并使用相对路径来解决这个问题。例如,我可以决定将这些多项目数据集存储在比项目所在位置高两层的数据文件夹中。

shared_data_location <- "../../Data/"
Run Code Online (Sandbox Code Playgroud)

但是,在我与合作者一起开展项目的地方,即使这样,对于他们能够放置代码文件夹和数据文件夹的位置来说,这也是一种强加/假设。

r project

5
推荐指数
1
解决办法
370
查看次数

R对象的名称包含多个功能

根据我对Hadley关于构建S3对象的建议的阅读,我使用了辅助函数,构造函数和验证器函数.一个简单的可重复的例子:

test_object <- function(x, y, z) {
    new_test_object(x, y, z)
}

new_test_object <- function(x, y, z) {
    structure(list(x = x,
                   y = y,
                   z = z,
                   x_name = deparse(substitute(x))),
              class = "test_object")
}

validate_test_object <- function(test_object) {
    # Anything goes
    test_object
}
Run Code Online (Sandbox Code Playgroud)

我希望生成的对象包含一个值,该值包含传入项的原始名称($x_name在上面的示例中).deparse(substitute(...))如果我直接调用构造函数,这个技巧就有效:

alpha = "a"
test_constructor <- new_test_object(x = alpha, y = "b", z = "c")
test_constructor$x_name
# [1] "alpha"
Run Code Online (Sandbox Code Playgroud)

但是如果我使用辅助函数则不行:

test_helper <- test_object(x = alpha, y = "b", z = "c")
test_helper$x_name …
Run Code Online (Sandbox Code Playgroud)

r r-s3 nse

4
推荐指数
1
解决办法
77
查看次数

标签 统计

r ×2

nse ×1

project ×1

r-s3 ×1