【问题标题】:converting strings to formula objects in Julia在 Julia 中将字符串转换为公式对象
【发布时间】:2015-01-02 15:12:48
【问题描述】:

我在 Julia 中有一个少于 10 个列名的数据框。我想生成一个可以输入线性模型的所有可能公式的列表(例如,[Y~X1+X2+X3, Y~X1+X2, ....])。我可以使用combinations() 和列名的字符串版本轻松完成此操作。但是,当我尝试将字符串转换为公式对象时,它会崩溃。看着DataFrames.jl documentation,似乎只能从“表达式”构造公式,而我确实可以将单个列名的列表作为表达式。有没有什么办法可以以某种方式使用“+”运算符以编程方式将一堆不同的表达式连接在一起,以便可以将生成的复合表达式传递到公式构造函数的 RHS 中?我的冲动是搜索一些将任意字符串转换为等效表达式的函数,但不确定这是否正确。

【问题讨论】:

    标签: metaprogramming julia


    【解决方案1】:

    函数parse 接受一个字符串,解析它,然后返回一个表达式。我认为将它用于您所说的内容没有任何问题。

    【讨论】:

    • 太好了,非常感谢。我刚刚在文档中找到了 parse(),它看起来对于将任意字符串转换为表达式非常有用。
    • 不幸的是,该文档不可用。你有任何关于如何将它用于提出的问题的例子吗?
    【解决方案2】:

    这是一些实际工作的代码,因为我一直在努力解决类似的问题。请注意这是 Julia 版本 1.3.1,所以 parse 现在是 Meta.parse 而不是 combinations 我使用了 IterTools.subsets

    using RDatasets, DataFrames, IterTools, GLM
    airquality = rename(dataset("datasets", "airquality"), "Solar.R" => "Solar_R")
    predictors = setdiff(names(airquality), [:Temp])
    for combination in subsets(predictors)
      formula = FormulaTerm(Term(:Temp), Tuple(Term.(combination)))
      if length(combination) > 0
        @show lm(formula, airquality)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多