根据我的理解,=>过去常常将字符串绑定为变量名。
例如,
df1 = DataFrame(x=1:2, y= 11: 12)
df2 = DataFrame("x"=>1:2, "y"=> 11: 12)
Run Code Online (Sandbox Code Playgroud)
两者都返回相同的结果,
? Row ? x ? y ?
? ? Int64 ? Int64 ?
???????????????????????
? 1 ? 1 ? 11 ?
? 2 ? 2 ? 12 ?
Run Code Online (Sandbox Code Playgroud)
这里唯一的区别是 indf1的x变量保持,1:2而 indf2的"x"字符串保持1:2。所以,从上面的结果,我假设从我可以使用的字符串创建变量=>。
但是当我尝试在像下面这样的简单变量中保存值时
x = 10
开/关: 10
"y"=>10
开/关: "y" => 10
这个结果我无法理解。当我打印x它时,它10符合预期。但是当我打印时,y我得到了UndefVarError. 我发现同样的效果Symbol也:z =>10
我=>猜我的假设是错误的。因为字符串实际上并没有转换为新变量。
=>朱莉娅的实际目的是什么?我必须在其中使用=>而不是=?
Bog*_*ski 13
要了解什么=>意思,只需写:
@edit 1 => 2
Run Code Online (Sandbox Code Playgroud)
在源代码中,您将看到:
Pair(a, b) = Pair{typeof(a), typeof(b)}(a, b)
const => = Pair
Run Code Online (Sandbox Code Playgroud)
Soa => b只是 的简写Pair(a, b)。因此它只是创建一个类型为Pairholdera和的对象b。它是一个调用(在本例中是对构造函数的调用)。这就是全部。它在语言中没有特殊含义。就像1 ÷ 2是一样div(1, 2)。
值得注意的是,您会发现在 DataFrames.jl=>中Dict和中使用的a => b形式a和形式一样,b可以是任何东西。简单对比一下:
df1 = DataFrame(x=1:2, y=11:12)
Run Code Online (Sandbox Code Playgroud)
调用DataFrame带有两个关键字参数 x和的构造函数y。问题是关键字参数被限制为有效标识符(例如它们不允许空格),因此并非您可以想象的所有数据框都可以使用此构造函数创建。
现在
df2 = DataFrame("x"=>1:2, "y"=>11:12)
Run Code Online (Sandbox Code Playgroud)
调用DataFrame带有两个位置参数的构造函数,它们是"x"=>1:2和"y"=>11:12。现在,由于Pair可以在左侧容纳任何内容,您可以例如将字符串作为列名传递(并且字符串可以包含您喜欢的任何字符序列)。
换句话说,DataFrame(x=1:2, y=11:12)和DataFrame("x"=>1:2, "y"=>11:12)是对数据帧的两个独立构造函数的调用(它们在 DataFrames.jl 包中有完全不同的实现)。实际上,我什DataFrame(x=1:2, y=11:12)至会因为过时而删除(它不如后一种形式灵活),但它是出于遗留原因而提供的(在玩具示例中,它更容易输入)。
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |