何时使用“source()”或“attach()”

发布于 2024-10-20 19:58:07 字数 1010 浏览 4 评论 0原文

我的项目目录结构的一部分如下所示:

\projects\project\main.R
\projects\project\src

其中 \src 包含一堆每个文件一个函数、特定于项目的函数。

问:将这些函数添加到工作目录 projects\project 的最佳实践方法是什么?

我看到了一些解决方案:

  1. attach("./src")。我试图避免这种情况,因为 (1) Google 样式指南建议避免使用 attach() 以及 (2) 我收到

    警告消息:
    

    1:从 Windows 上的 Splus 读取 Unix 风格数据库目录 (./tmp):可以 查找某些数据集时遇到问题,尤其是那些名称 仅大小写不同(文件 tmp-script1.ssc 不应由 Windows 上的 Splus)位于:exists(name, where = db) 执行此操作时。

  2. lapply(paste("./src/",list.files("./src/"),sep=""),source)。这工作得很好,只是看起来很笨重。一定有更好的方法,对吧?

  3. 通过全名./src/myfunc引用我的函数。这很快就会变得丑陋。我确信有更好的方法。

  4. 删除目录中的 ./src 部分,并将所有函数扔到主工作目录中。这样做的问题是,我更愿意保留与 John Myles White 的 ProjectTemplate

    接近的目录结构,
  5. 将所有函数放入一个文件 ./src /func.R 并获取它。我想这种方法避免了“2”的丑陋。上面,但我真的很想每个文件都有一个函数。这样看起来更干净。

Part of my project directory structure looks like:

\projects\project\main.R
\projects\project\src

where \src contains a bunch of 1-function-per-file, project-specific functions.

Q: What's the best practice way to add these functions to the working directory projects\project?

There are a few solutions I see:

  1. attach("./src"). I'm trying to avoid this because (1) the Google Styleguide recommends avoiding the use of attach() and (2) I receive the

    Warning messages:
    

    1: Reading Unix style database directory (./tmp) from Splus on Windows: may
    have problems finding some datasets, especially those whose names
    differ only by case (file tmp-script1.ssc should not have been made by
    Splus on Windows) in: exists(name, where = db)

    when doing this.

  2. lapply(paste("./src/",list.files("./src/"),sep=""),source). This works perfectly fine, it just seems clunky. There has to be a better way, right?

  3. Refer to my functions by their full name ./src/myfunc. This will get ugly very quick. I'm sure there's a better way.

  4. Get rid of the ./src part of my directory and just throw all the functions in the main working directory. The problem with this is that I'd prefer to keep with a directory structure that is close to that of John Myles White's ProjectTemplate

  5. Throw all the functions in one file, ./src/func.R and source that. I guess this approach avoids the ugliness of "2." above, but I'd really like to have one function per file. Just seems cleaner that way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

总攻大人 2024-10-27 19:58:07

尝试

lapply(list.files("src", full.names = TRUE), source)

编辑

lapply(Sys.glob("src/*"), source)

Try

lapply(list.files("src", full.names = TRUE), source)

EDIT

or

lapply(Sys.glob("src/*"), source)
尛丟丟 2024-10-27 19:58:07

如果您不想将所有内容都放入本地包中,那么我会选择选项 2。

If you don't want to put everything into a local package, then I'd go for option 2.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文