我可以从全局文件将变量导入R吗?

我可以从全局文件将变量导入R吗?,r,makefile,R,Makefile,我正在集成一个R脚本,以将一些图形生成到一个更大的项目中,该项目与一个Makefile结合在一起。在这个较大的项目中,我有一个名为globals.mk的文件,其中包含项目中许多其他脚本使用的全局变量。例如,我想要运行的模拟数量是我想要在这个R脚本中使用的全局数量。我是否可以将其作为变量“导入”,或者是否需要手动定义R脚本中的每个变量 编辑:这是一个我需要阅读的globals示例 num = 100 path = ./here/is/a/path file = $(path)/file.csv

我正在集成一个R脚本,以将一些图形生成到一个更大的项目中,该项目与一个Makefile结合在一起。在这个较大的项目中,我有一个名为
globals.mk
的文件,其中包含项目中许多其他脚本使用的全局变量。例如,我想要运行的模拟数量是我想要在这个R脚本中使用的全局数量。我是否可以将其作为变量“导入”,或者是否需要手动定义R脚本中的每个变量

编辑:这是一个我需要阅读的globals示例

num = 100
path = ./here/is/a/path
file = $(path)/file.csv

我希望R脚本将变量
num
设置为100(或“100”),
path
设置为“/here/is/a/path”和
file
设置为“/here/is/a/path/file.csv”。如果
.mk
文件没有直接变量扩展(例如更复杂的
make
-规则/技巧/函数),最好信任
make
为您进行扩展,然后将其读入。我发现有一篇帖子转储了所有变量内容(在处理之后)

TL;博士
expand\u mkvars如果
.mk
文件除了直接变量扩展之外还有其他内容(例如更复杂的
make
-规则/技巧/函数),最好信任
make
为您进行扩展,然后读入。我发现有一篇帖子转储了所有变量内容(在处理之后)

TL;博士
expand_mkvars如果可以用大括号替换括号,则
readRenviron
将读取这些文件,并执行替换,返回内容作为环境变量

# write out test file globals2.mk which uses brace brackets
Lines <- "num = 100
path = ./here/is/a/path
file = ${path}/file.csv"
cat(Lines, file = "globals2.mk")

readRenviron("globals2.mk")
Sys.getenv("num")
## [1] "100"
Sys.getenv("path")
## [1] "./here/is/a/path"
Sys.getenv("file")
## [1] "./here/is/a/path/file.csv"
#写出使用大括号的测试文件globals2.mk

行如果可以用大括号替换括号,则
readRenviron
将读取这些文件,并执行替换,返回内容作为环境变量

# write out test file globals2.mk which uses brace brackets
Lines <- "num = 100
path = ./here/is/a/path
file = ${path}/file.csv"
cat(Lines, file = "globals2.mk")

readRenviron("globals2.mk")
Sys.getenv("num")
## [1] "100"
Sys.getenv("path")
## [1] "./here/is/a/path"
Sys.getenv("file")
## [1] "./here/is/a/path/file.csv"
#写出使用大括号的测试文件globals2.mk

当然可以,但是如何操作取决于
globals.mk
文件的格式。最简单的方法是使用,但对于其他格式(如和其他格式)也有选项。请发布您的文件示例,或指定该文件上的约束条件(如果有)。如果global.mk包含类似
num=100
(这是有效的R源代码)的行,则在R程序中使用
source(“global.mk”)
读取并运行它。如果它不是有效的R源,则使用
readLines
读入它,并执行任何需要的处理,以从
readLines
返回的字符向量中提取和设置值。请注意,问题应该包括一个完整的最小可复制示例。谢谢,我添加了更多细节并澄清了要求。您可以在调用R脚本时传递命令行参数。现在还不清楚你是怎么称呼这个剧本的。请尝试提供一个我们可以实际运行和测试的文件。您当然可以,但您如何做取决于
globals.mk
文件的格式。最简单的方法是使用,但对于其他格式(如和其他格式)也有选项。请发布您的文件示例,或指定该文件上的约束条件(如果有)。如果global.mk包含类似
num=100
(这是有效的R源代码)的行,则在R程序中使用
source(“global.mk”)
读取并运行它。如果它不是有效的R源,则使用
readLines
读入它,并执行任何需要的处理,以从
readLines
返回的字符向量中提取和设置值。请注意,问题应该包括一个完整的最小可复制示例。谢谢,我添加了更多细节并澄清了要求。您可以在调用R脚本时传递命令行参数。现在还不清楚你是怎么称呼这个剧本的。请试着提供一个我们可以实际运行和测试的答案。也在这里暗示:(和其他答案在那里)也在这里暗示:(和其他答案在那里)这是完美的!Sys.getenv()允许我调用变量,这正是我所需要的。这太完美了!Sys.getenv()允许我调用变量,这正是我所需要的。
# write out test file globals2.mk which uses brace brackets
Lines <- "num = 100
path = ./here/is/a/path
file = ${path}/file.csv"
cat(Lines, file = "globals2.mk")

readRenviron("globals2.mk")
Sys.getenv("num")
## [1] "100"
Sys.getenv("path")
## [1] "./here/is/a/path"
Sys.getenv("file")
## [1] "./here/is/a/path/file.csv"
# write out test file - this one uses parentheses as in question
Lines <- "num = 100
path = ./here/is/a/path
file = $(path)/file.csv"
cat(Lines, file = "globals.mk")

# read globals.mk, perform () to {} substitutions, write out and then re-read
tmp <- tempfile()
L <- readLines("globals.mk")
cat(paste(chartr("()", "{}", L), collapse = "\n"), file = tmp)
readRenviron(tmp)