Bog*_*ski 5 interpolation dataframe julia
我定义了以下线性插值器:
\njulia> using DataFrames, Interpolations\n\njulia> xs = 1:0.2:5;\n\njulia> ys = log.(xs);\n\njulia> li = LinearInterpolation(xs, ys);\n
Run Code Online (Sandbox Code Playgroud)\n并有一个数据框:
\njulia> df = DataFrame(x=2:0.1:3)\n11\xc3\x971 DataFrame\n Row \xe2\x94\x82 x\n \xe2\x94\x82 Float64\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\n 1 \xe2\x94\x82 2.0\n 2 \xe2\x94\x82 2.1\n 3 \xe2\x94\x82 2.2\n 4 \xe2\x94\x82 2.3\n 5 \xe2\x94\x82 2.4\n 6 \xe2\x94\x82 2.5\n 7 \xe2\x94\x82 2.6\n 8 \xe2\x94\x82 2.7\n 9 \xe2\x94\x82 2.8\n 10 \xe2\x94\x82 2.9\n 11 \xe2\x94\x82 3.0\n
Run Code Online (Sandbox Code Playgroud)\n我可以将:x
数据框的列传递给li
递给这样的:
julia> li(df.x)\n11-element Vector{Float64}:\n 0.6931471805599453\n 0.7408022704621078\n 0.7884573603642704\n 0.831963048859085\n 0.8754687373538997\n 0.915490091190668\n 0.9555114450274363\n 0.9925654311042973\n 1.0296194171811581\n 1.0641158529246337\n 1.0986122886681098\n
Run Code Online (Sandbox Code Playgroud)\n但是,当我尝试使用transform
函数时,它失败了:
julia> transform(df, :x => li => :y)\nERROR: ArgumentError: Unrecognized column selector: :x => (21-element extrapolate(scale(interpolate(::Vector{Float64}, BSpline(Linear())), (1.0:0.2:5.0,)), Throw()) with element type Float64:\n
Run Code Online (Sandbox Code Playgroud)\n并抛出一个我不明白的奇怪错误。如何解决这个问题?
\n您遇到的问题是li
LinearInterpolations.jl 没有定义为以下类型的子类型:Function
:
julia> li isa Function\nfalse\n
Run Code Online (Sandbox Code Playgroud)\n诸如此类的对象在 Julia 中li
被称为仿函数,有时它们的作者不会选择将它们设为仿函数的子类型Function
。在这种情况下,最简单的解决方案是使用匿名函数作为解决方法:
julia> transform(df, :x => (x -> li(x)) => :y)\n11\xc3\x972 DataFrame\n Row \xe2\x94\x82 x y\n \xe2\x94\x82 Float64 Float64\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\n 1 \xe2\x94\x82 2.0 0.693147\n 2 \xe2\x94\x82 2.1 0.740802\n 3 \xe2\x94\x82 2.2 0.788457\n 4 \xe2\x94\x82 2.3 0.831963\n 5 \xe2\x94\x82 2.4 0.875469\n 6 \xe2\x94\x82 2.5 0.91549\n 7 \xe2\x94\x82 2.6 0.955511\n 8 \xe2\x94\x82 2.7 0.992565\n 9 \xe2\x94\x82 2.8 1.02962\n 10 \xe2\x94\x82 2.9 1.06412\n 11 \xe2\x94\x82 3.0 1.09861\n
Run Code Online (Sandbox Code Playgroud)\n