gpt4 book ai didi

r - R 中的编译时操作

转载 作者:行者123 更新时间:2023-12-04 04:42:53 25 4
gpt4 key购买 nike

假设我有一个文件 foo.R以及 rex.txt 中的正则表达式列表.
如果我把

rex <- paste(read.table("rex.txt", stringsAsFactors=FALSE)[[1]],collapse="|")

进入 foo.R ,然后是变量 rex加载时正确初始化 foo.R使用 library() .
当我编译 foo.R 时也会发生同样的情况至 foo.Rc并加载后者,这很好。

然而,我想要的是变量 rex 的字面值包含在 foo.Rc 中(当我调用 cmpfile 时),即当 foo.Rc 时已加载,变量 rexrex.txt 中的任何内容初始化在编译时,类似于 Emacs Lisp eval-when-compile (这样我就不必将 rex.txt 复制到我实际运行的服务器 foo.Rc )。

是否有可能?

最佳答案

您可以修改foo.R就在编译之前,如下所示。

测试数据:

text <- '
doSomething()
rex <- paste(read.table("rex.txt", stringsAsFactors=FALSE)[[1]],collapse="|")
doOtherStuff()
'

writeLines(text,"foo.R")

代码:
foo <- readLines("foo.R")

pattern <- "^rex\\s*<-.*$"

eval(parse(text=grep(pattern, foo, value=TRUE))[[1]])

newtext <- gsub(pattern, paste("rex <-",deparse(rex)), foo)

writeLines(newtext,"foo.R")

请注意 eval()将执行行 rex <- ...在全局环境中创建此对象,以便 deparse()可以找到。我还假设您只有一行与 pattern 匹配使用。

关于r - R 中的编译时操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com