【问题标题】:Passing a seq<string option> from F# to RProvider将 seq<string option> 从 F# 传递给 RProvider
【发布时间】:2017-01-13 05:54:01
【问题描述】:

上周我向this question 询问了传递给RProvider 的seq&lt;float option&gt; 值。我曾希望我能够将接受的答案应用到 F# 中的其他 option 类型。不幸的是,NaN 仅适用于 R 中的numeric

如何将 F# 中的 None 字符串转换为 NA 并传递给 R?

【问题讨论】:

    标签: f#


    【解决方案1】:

    您可以使用Option.toObj

    例如:

    let l1 = [ Some "x"; None; Some "y"] 
    
    let l2 = l1 |> List.map (Option.toObj)
    // val l2 : string list = ["x"; null; "y"]
    

    您可以将Option.toNullable 用于数值,但它会转换为Nullable&lt;float&gt; 类型,而None 也将是null由于某种原因,这反过来不起作用:

    let l3 = l2 |> List.map (Option.ofObj)
    // val l3 : string option list = [Some "x"; null; Some "y"]
    

    我不知道这是故意还是错误。

    编辑:Option.ofObj 工作正常。 F# Interactive 将None 显示为null,当它出于某种原因在列表中时。

    【讨论】:

      【解决方案2】:

      您上一个问题的答案仍然适用。您可以使用null 表示缺少的字符串值:

      let optString = ["x"; null; "y"]
      
      let testData5 =
          namedParams [
              "optString", optString;]
          |> R.data_frame 
      

      给我:

      val testData5 : SymbolicExpression =
      选择字符串
      1 个
      2 &lt;NA&gt;
      3 年

      您可以将选项字符串转换为字符串列表:

      let optString2 = [Some "x"; None; Some "y"]
      optString2 
          |> List.map (fun x -> match x with
                                | Some x -> x
                                | None -> null)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 2019-03-03
        • 2014-08-03
        • 2021-08-31
        • 2018-10-24
        相关资源
        最近更新 更多