Skip to content

Values round tripped Julia -> R -> Julia -> R are lost #572

@frankier

Description

@frankier

Values round tripped Julia -> R -> Julia -> R are lost.

Not keeping handles on references (see: #444 ) is a reasonably probable cause.

using RCall

get_arg(arg) = arg
get_arg_r(arg) = R"""$(arg)"""
get_r_val() = R"""42"""
get_roundtripped() = R"""$(get_r_val())"""

print("# Trips that don't contain Julia -> R -> Julia -> R are okay")
@info "Julia -> R -> Julia (okay)" get_arg_r(42)
@info "Julia -> R -> Julia (okay)" R"""$(get_arg(42))"""
println("R -> Julia -> R (okay, from R)")
R"""print($(get_r_val()))"""
@info "R -> Julia -> R -> Julia (okay)" R"""$(get_r_val())"""
println()

println("# Julia -> R -> Julia -> R gets lost")
println("Julia -> R -> Julia -> R (lost, from R)")
R"""print($(get_arg_r(42)))"""
println()

println("# Trips containing Julia -> R -> Julia -> R get lost")
@info "Julia -> R -> Julia -> R -> Julia (lost)" R"""$(get_arg_r(42))"""
println("R -> Julia -> R -> Julia -> R (lost, from R)")
R"""print($(get_roundtripped()))"""
# Trips that don't contain Julia -> R -> Julia -> R are okay┌ Info: Julia -> R -> Julia (okay)
│   get_arg_r(42) =
│    RObject{IntSxp}
│    [1] 42
└
┌ Info: Julia -> R -> Julia (okay)
│   R"$(get_arg(42))" =
│    RObject{IntSxp}
│    [1] 42
└
R -> Julia -> R (okay, from R)
[1] 42
┌ Info: R -> Julia -> R -> Julia (okay)
│   R"$(get_r_val())" =
│    RObject{RealSxp}
│    [1] 42
└

# Julia -> R -> Julia -> R gets lost
Julia -> R -> Julia -> R (lost, from R)
NULL

# Trips containing Julia -> R -> Julia -> R get lost
┌ Info: Julia -> R -> Julia -> R -> Julia (lost)
│   R"$(get_arg_r(42))" =
│    RObject{NilSxp}
│    NULL
└
R -> Julia -> R -> Julia -> R (lost, from R)
NULL
RObject{NilSxp}
NULL

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions