在Julia中将字符串转换为公式对象

时间:2014-11-06 07:29:26

标签: metaprogramming julia

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

2 个答案:

答案 0 :(得分:5)

函数parse接受一个字符串,解析它,并返回一个表达式。我认为将它用于你所谈论的内容并没有错。

答案 1 :(得分:1)

这是一些实际的工作代码,因为我一直在努力解决类似的问题。请注意,这是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