使用源R加载环境

时间:2017-06-19 11:14:30

标签: r environment rodbc

决定将我的代码划分为不同的脚本,并使用source通过“main”脚本运行它们。

其中一个脚本是“Settings.R”环境,其中包含数据库连接详细信息和一些其他设置。

当我尝试使用source('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并且没有帮助

  

local: TRUE,FALSE或环境,确定解析的位置   表达式被评估。 FALSE(默认值)对应于   用户的工作空间(全局环境)和对环境的真实性   来自哪个来源。

我收到以下错误消息(p.s a little swedish text)

  

警告消息:1:在odbcDriverConnect(设置$ dbConnection)中:

     

[RODBC]错误:状态08001,代码17,消息[Microsoft] [ODBC SQL   服务器驱动程序] [DBNETLIB] Antingen finns inte SQL Serverellerånekas   åtkomst。 2:在odbcDriverConnect(设置$ dbConnection)中:

     

[RODBC] ERROR:状态01000,代码53,消息[Microsoft] [ODBC SQL   服务器驱动程序] [DBNETLIB] ConnectionOpen(Connect())。 3:在   odbcDriverConnect(settings $ dbConnection):ODBC连接失败   &GT;

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

很抱歉,此回应不及时!但是我遇到了类似的问题,因此对于后代,我有一个可能的解决方案。我怀疑您正在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

来自数据库连接的错误是由于传递环境而不是连接字符串引起的。希望瑞典的信息支持这一理论!