Как создать макрос строки R.." с кодом R, закодированным в строке
Я пытаюсь реализовать своего рода
@Rinclude
макрос для включения кода R, написанного в файле в Julia с помощью пакета RCall Julia, но у меня возникли проблемы с созданием
R"..."
строковый макрос распознает код, закодированный в строке, которую я прочитал:
RCode = """
sumMyArgs <- function(i, j, z) i+j+z
"""
open(f->write(f,RCode),"RScript.R","w")
macro Rinclude(fname)
quote
rCodeString = read($fname,String)
R"$rCodeString"
nothing
end
end
@Rinclude("RScript.R")
a = rcopy(R"sumMyArgs"(3,4,5)) # Error as it can't find sumMyArgs
Проблема в том, что строковый макрос R"..." не работает с интерполированной строкой из
$rCodeString
. Возвращаемый объект представляет собой
RObject{StrSxp}
вместо
RObject{ClosSxp}
:
julia> a = R"""$(rCodeString)"""
RObject{StrSxp}
[1] "sumMyArgs <- function(i, j, z) i+j+z\n"
julia> R"""sumMyArgs3 <- function(i, j, z) i+j+z"""
RObject{ClosSxp}
function (i, j, z)
i + j + z
1 ответ
Ааа... публикация в SO вдохновляет.
Возможно, не лучшее решение, но в моем случае работает, просто используйте
reval(string)
в макросе:
RCode = """
sumMyArgs <- function(i, j, z) i+j+z
"""
open(f->write(f,RCode),"RScript.R","w")
macro Rinclude(fname)
quote
rCodeString = read($fname,String)
reveal(rCodeString)
nothing
end
end
@Rinclude("RScript.R")
a = rcopy(R"sumMyArgs"(3,4,5)) #12