Когда использовать `source ()` или `attach ()` - PullRequest
2 голосов
/ 09 марта 2011

Часть структуры моего проекта выглядит так:

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

, где \src содержит набор функций, зависящих от проекта, по 1 функции на файл.

В: Какой лучший способ добавить эти функции в рабочий каталог projects\project?

Я вижу несколько решений:

  1. attach("./src"). Я пытаюсь избежать этого, потому что (1) Google Styleguide рекомендует избегать использования attach() и (2) я получаю

    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) при этом.

  2. lapply(paste("./src/",list.files("./src/"),sep=""),source). Это прекрасно работает, просто кажется неуклюжим. Должен быть лучший способ, верно?

  3. Обратитесь к моим функциям по их полному имени ./src/myfunc. Это станет очень быстро. Я уверен, что есть лучший способ.

  4. Избавьтесь от части ./src моего каталога и просто добавьте все функции в основной рабочий каталог. Проблема в том, что я предпочел бы сохранить структуру каталогов, близкую к структуре ProjectTemplate

  5. Бросьте все функции в один файл, ./src/func.R и отправьте его. Я полагаю, что такой подход позволяет избежать уродства "2". выше, но мне бы очень хотелось иметь одну функцию на файл. Просто кажется чище таким образом.

Ответы [ 2 ]

6 голосов
/ 09 марта 2011

Попробуйте

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

РЕДАКТИРОВАТЬ

или

lapply(Sys.glob("src/*"), source)
1 голос
/ 09 марта 2011

Если вы не хотите помещать все в локальный пакет, я бы выбрал вариант 2.

...