Загрузить среду с использованием исходного кода R

решил разделить свой код на разные сценарии и запустить их через «основной» сценарий, используя исходный код.

Одним из сценариев является среда «Settings.R», содержащая сведения о подключении к базе данных и некоторые другие параметры.

Когда я пытаюсь загрузить скрипт с помощью источника («Settings.R»), он находит среду, и я могу получить доступ к переменным в консоли. Но когда я пытаюсь установить соединение с базой данных, это не удается.

Однако, если я запускаю сценарий Settings.R вручную, а затем пытаюсь установить соединение в другом сценарии, он работает.

# Settings script:
settings <- as.environment(list())
settings$dbConnection <- 'Driver={SQL Server};Server=SERVER INFO;Database=DATABASE;Uid=USERNAME;Pwd=PASSWORD';

# The calling script
source('Settings.R')
dbConnection <- odbcDriverConnect(settings$dbConnection)
# DO STUFF
close(dbConnection);

Возможно, это связано с тем, что среда настроек недоступна глобально.

Я попытался изменить "локальную" переменную на ИСТИНА / ЛОЖЬ, но это не помогло.

local: TRUE, FALSE или окружение, определяющее, где будут оцениваться проанализированные выражения. FALSE (по умолчанию) соответствует рабочей области пользователя (глобальной среде), а TRUE - среде, из которой вызывается источник.

Я получаю следующее сообщение об ошибке (немного шведского текста)

Предупреждающие сообщения: 1: В odbcDriverConnect (настройки $ dbConnection):

[RODBC] ОШИБКА: состояние 08001, код 17, сообщение [Microsoft] [Драйвер ODBC SQL Server] [DBNETLIB] Не удалось добавить SQL Server или нет. 2: В odbcDriverConnect (настройки $ dbConnection):

[RODBC] ОШИБКА: состояние 01000, код 53, сообщение [Microsoft] [Драйвер ODBC SQL Server] [DBNETLIB] ConnectionOpen (Connect ()). 3: В odbcDriverConnect (настройки $ dbConnection): сбой подключения ODBC>

Любые идеи?


person Khenrix    schedule 19.06.2017    source источник
comment
Попробуйте вставить source('Settings.R') в свой Rprofile.site. Это будет первое, что откроет R и будет в окружении.   -  person Pierre Lapointe    schedule 19.06.2017
comment
@PLapointe, который не помог: / Если бы это сработало, и я хотел бы запустить сценарий на другом компьютере, разве мне не пришлось бы настраивать его таким же образом, прежде чем я смогу запустить сценарий? Я отредактирую сообщение, добавив еще код.   -  person Khenrix    schedule 19.06.2017
comment
@Khenrix Он должен работать, по умолчанию source() будет оценивать все вещи в глобальной среде, и он должен быть таким же, как и запись всего кода в одном файле. Проблема все еще существует, если вы очистите среду, перезапустите сеанс R и установите рабочий каталог в качестве исходного файла? Что за сообщение об ошибке?   -  person Consistency    schedule 20.06.2017
comment
@ Согласованность Да, я пробовал очистить окружающую среду. Не помогло. Я отредактировал сообщение с сообщением об ошибке. Я попытался создать строку с данными о подключении и в вызывающем скрипте, и это сработало. Когда я проверяю родительский элемент среды настроек, я получаю: parent.env(settings) <environment: R_EmptyEnv> Может быть проблема? Файл настроек был автоматически сгенерирован для меня, поэтому я подумал, что это будет правильно.   -  person Khenrix    schedule 20.06.2017


Ответы (1)


Приносим извинения за несвоевременный ответ! Но я столкнулся с подобной проблемой, и поэтому для потомков у меня есть вероятное решение. Я подозреваю, что вы запускаете этот код в Linux. Символ доллара $ - это специальный символ, и его нужно экранировать в строках командной строки.

Для скрипта env1.R:

e1 <- new.env()
e1$x <- 1

В интерактивном режиме из R:

source('env1.R');e1$x
# [1] 1

Из Rscript:

Rscript -e "source('env1.R');e1$x"
# 
# <environment: 0x33ca1b0>
Rscript -e "source('env1.R');e1\$x"
# [1] 1

Ошибка подключения к базе данных была вызвана передачей среды, а не строки подключения. Надеюсь, шведское сообщение поддерживает эту теорию!

person CSJCampbell    schedule 22.08.2018