我能够很好地运行以下代码,并且它提供了预期的结果:
\njulia> using DataFrames, DataFramesMeta\n\njulia> expr = "2*:a+:b"\n"2*:a+:b"\n\njulia> df = DataFrame(a=[1,2],b=[3,4])\n2\xc3\x972 DataFrame\n Row \xe2\x94\x82 a b \n \xe2\x94\x82 Int64 Int64 \n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 3\n 2 \xe2\x94\x82 2 4\n\njulia> eval(Meta.parse("@transform(df, " * join(collect(":res" => expr), " = ") * ")"))\n2\xc3\x973 DataFrame\n Row \xe2\x94\x82 a b res \n \xe2\x94\x82 Int64 Int64 Int64 \n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 1 3 5\n 2 \xe2\x94\x82 2 4 8\n\nRun Code Online (Sandbox Code Playgroud)\n然而,当在模块内完成时,这会失败。
\njulia> module foo\n using DataFrames, DataFramesMeta\n function bar()\n expr = "2*:a+:b"\n df = DataFrame(a=[1,2],b=[3,4])\n …Run Code Online (Sandbox Code Playgroud)