Раньше я использовал Rprofile.site
для установки options(stringsAsFactors = FALSE)
. Однако многочисленные источники утверждают, что использование Rprofile.site
для этой цели делает код менее переносимым. Мое решение состояло в том, чтобы запускать source('C:/...startup.script.R')
каждый раз, когда я загружаю R. Этот сценарий запуска устанавливает stringsAsFactors = FALSE
(наряду с выполнением других задач). Это работает, но чтобы поделиться своими сценариями с другими, мне пришлось бы поделиться интересующим меня сценарием и моим startup.script.R
сценарием.
Я создаю собственный пакет, который позволит мне делиться своими пользовательскими функциями. Я планирую поставить require(MyCustomFunctionsPackage)
(или что-то в этом роде) в начале всех моих скриптов, чтобы загружать свои пользовательские функции. Я хочу встроить source('C:/...startup.script.R')
(или что-то в этом роде) и файл startup.script.R
в пакет MyCustomFunctionsPackage
, чтобы, когда я делюсь своими сценариями, мне нужно было только поделиться интересующим сценарием с вызовом devtools::install_github('MyCustomFunctionsPackage','github_username')
и всеми моими пользовательскими функциями. и настройки будут загружены. Есть ли способ сделать это? Я уверен, что ответ находится где-то в книга Хэдли или CRAN литература, но я не уверен, по каким ключевым словам искать.
Точка хорошо взята. Вероятно, мне следует просто включить options(stringsAsFactors = FALSE)
в любой скрипт, которому нужен этот код.
Вы можете указать функцию с именем .onLoad()
, которая будет вызываться при каждой загрузке пакета. Вот простой воспроизводимый пример, показывающий, как его можно использовать:
## Create and install a package containing a function `.onLoad()`
library(pkgKitten)
kitten("myopts")
cat(
".onLoad <- function(libname, pkgname) {
options(stringsAsFactors = FALSE)
}
", file = "myopts/R/zzz.R")
devtools::install("myopts")
## Confirm that loading the package sets stringsAsFactors
options('stringsAsFactors')
## $stringsAsFactors
## [1] TRUE
library(myopts)
options('stringsAsFactors')
## $stringsAsFactors
## [1] FALSE
Проголосовал pkgKitten
в дикой природе! :) Также показан подход options()
, делающий вопрос спорным для этой конкретной настройки.
@DirkEddelbuettel Ха! TBH, я ответил в основном, чтобы продемонстрировать, насколько легко можно сделать пакет с kitten()
, чтобы опробовать какой-то код/идею. Но похоже, я просто проповедовал проповеднику ;)
Возможно, мнения по этому поводу будут отличаться, но я бы не хотел, чтобы пакет, который я загружаю, изменил мой вариант сеанса
stringsAsFactors
. Если бы пакет демонстрировал такое поведение, я бы не стал его использовать. Если вы хотите, чтобы ваш код не имел дело с факторами, вероятно, лучше всего обрабатывать его вручную во внутреннем коде.