使用juliarcall包将NA传递给R

使用juliarcall包将NA传递给R,julia,rcall,Julia,Rcall,对于imputeTS包,我在将数组中的NA传递给R时遇到了一些问题 假设我有这个数组: a = Any[1, 2, 3, NaN, 5] 我想把它传给这个: R""" b <- na_seadec($a, algorithm = "kalman", find_frequency = TRUE, maxgap = Inf) """ R”“” bNaN在茱莉亚将是NaN在R。 如果要在R中使用NA,则应在Julia中使用missing: julia> x = [1, 2, NaN]

对于imputeTS包,我在将数组中的NA传递给R时遇到了一些问题

假设我有这个数组:

a = Any[1, 2, 3, NaN, 5]
我想把它传给这个:

R"""
b <- na_seadec($a, algorithm = "kalman", find_frequency = TRUE, maxgap = Inf)
"""
R”“”

b
NaN
在茱莉亚将是
NaN
在R。 如果要在R中使用
NA
,则应在Julia中使用
missing

julia> x = [1, 2, NaN]
3-element Array{Float64,1}:
   1.0
   2.0
 NaN

julia> y = [1, 2, missing]
3-element Array{Union{Missing, Int64},1}:
 1
 2
  missing

julia> R"$x"
RObject{RealSxp}
[1]   1   2 NaN


julia> R"$y"
RObject{IntSxp}
[1]  1  2 NA
您可以在Julia手册的中找到详细信息

下面是一个示例会话:

julia> R"library(imputeTS)"
RObject{StrSxp}
[1] "imputeTS"  "stats"     "graphics"  "grDevices" "utils"     "datasets"
[7] "methods"   "base"


julia> a = [1,2,3,missing,5]
5-element Array{Union{Missing, Int64},1}:
 1
 2
 3
  missing
 5

julia> R"""
       b <- na_seadec($a, algorithm = "kalman", find_frequency = TRUE, maxgap = Inf)
       """
┌ Warning: RCall.jl: Warning in na_seadec(`#JL`$a, algorithm = "kalman", find_frequency = TRUE,  :
│   No seasonality information for dataset could be found, going on without decomposition.
│               Setting find_frequency=TRUE might be an option.
└ @ RCall ~/.julia/packages/RCall/g7dhB/src/io.jl:113
RObject{RealSxp}
[1] 1 2 3 4 5
julia>R“库(输入)”
RObject{StrSxp}
[1] “输入”“统计”“图形”“GR设备”“utils”“数据集”
[7] “方法”“基”
julia>a=[1,2,3,缺失,5]
五元素数组{Union{缺失,Int64},1}:
1.
2.
3.
丢失的
5.
朱莉娅>R“

b我想我发现了问题。R的方法是.numeric(),我不知道它在Julia中的等价物。问题是:我没有静态地定义“a”,我必须将它定义为一个空数组并将值推送到它。可能问题在于如何定义“a”数组。在推送所有值之后,我试图将其转换为Float64,但因为它包含missing,所以出现了错误。现在怎么办?可能使用例如
collect(Union{Float64,Missing},a)
应该会给你想要的,但是我需要一个完整的代码来确定(这是这个问题的一个单独的问题,所以如果我写的东西不能解决你的问题,也许可以发布另一个特定于转换问题的问题)。好的!!!最终我找到了答案:convert(数组{Union{Missing,Float64}},a)。我认为这绝对等同于as.numeric()。谢谢你的帮助
convert
几乎是相同的,但正如我所建议的,等效的是
collect
。不同之处在于,
collect
将始终创建一个副本(如R中的
as.numeric
),而如果
a
已经具有
eltype
等于
Union{Missing,Float64}
,则
convert
将不会创建副本。