Как создать макрос строки 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
Другие вопросы по тегам