有没有一种简单的方法可以从公式中删除响应变量?我试过使用stats::update.formula,像这样:
update(y ~ x, ~ .)
# y ~ x
Run Code Online (Sandbox Code Playgroud)
但是你可以看到上面没有从公式中删除响应变量。
我正在尝试创建一个字符串文字,表示带有带引号的字段的 CSV 文件。预期的 CSV 如下所示:
"a","b"
"1","2"
Run Code Online (Sandbox Code Playgroud)
如果我想在字符串末尾添加换行符,则三重引号有效:
julia> """
"a","b"
"1","2"
"""
"\"a\",\"b\"\n\"1\",\"2\"\n"
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试在末尾创建一个没有换行符的字符串,则会出现语法错误:
julia> """
"a","b"
"1","2""""
ERROR: syntax: cannot juxtapose string literal
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以解决这个问题?
顺便说一句,请注意,当您使用引号开始字符串文字时,没有语法错误:
julia> """"a","b"
"1","2"
"""
"\"a\",\"b\"\n\"1\",\"2\"\n"
Run Code Online (Sandbox Code Playgroud) 我想使用recipes包创建一个配方,该包既可以估算缺失的数据,又可以添加指示哪些值缺失的指标列。如果有一个选项可以选择为原始数据框中的每一列包含一个指标列,或者只包含原始数据框中缺少数据的列的指标列,那也很好。我知道我可以使用recipes轻松估算缺失值,但是是否有内置方法来添加缺失的指标列?
例如,如果我有一个这样的数据框:
> data.frame(x = c(1, NA, 3), y = 4:6)
x y
1 1 4
2 NA 5
3 3 6
Run Code Online (Sandbox Code Playgroud)
我希望插补和添加缺失的指标列后的输出看起来像这样:
x y x_missing
1 1 4 FALSE
2 2 5 TRUE
3 3 6 FALSE
Run Code Online (Sandbox Code Playgroud)
当然,对于这样的简单示例,我可以手动完成。但是在机器学习管道中处理大型数据集时,有一种自动化的方式来做到这一点会很有帮助。
根据 docs for recipes::check_missing,有一个columns论点,
列将(最终)由terms 参数填充的变量名称字符串。
但我不确定这意味着什么,因为没有terms论据check_missing.
作为参考,我正在寻找的功能由MissingIndicator类在scikit-learn 中实现。
这有效:
StatsPlots.@df SYN_MM_BM_df plot(
:t,
[:SYN_MM_BM_5, :SYN_MM_BM_10, :SYN_MM_BM_15, :SYN_MM_BM_30]
)
Run Code Online (Sandbox Code Playgroud)
但这不会:
StatsPlots.@df SYN_MM_BM_df plot(
:t,
[Symbol(name) for name in names(SYN_MM_BM_df[2:5])]
)
Error: Cannot convert Symbol to series data for plotting
Run Code Online (Sandbox Code Playgroud)
虽然:
[Symbol(name) for name in names(SYN_MM_BM_df)[2:5]] ==
[:SYN_MM_BM_5, :SYN_MM_BM_10, :SYN_MM_BM_15, :SYN_MM_BM_30
Run Code Online (Sandbox Code Playgroud)
是真的。
谁能解释为什么?我真的不想单独输入所有符号......
我正在用 Julia 编写代码。在这里,我有一个大小为 272x32 的数据框。我的目标是找到每列中的最小值,并将它们存储在一个包含 32 个元素的数组中。为了执行这个,我创建了一个 for 循环,迭代数据帧中的列范围。但是,在将值分配为全局值时,存储的输出只有最后一个值。但是,我希望它具有最少的列作为数组中的每个条目,我可以将其用于矩阵算术运算。
代码片段:
n = ncol(variables)
for i in 1:n
global mins = minimum(variables[!, i])
global maxs = maximum(variables[!, i])
end
Run Code Online (Sandbox Code Playgroud)
请建议解决此问题。
问候,
CategoricalArrays.jl 中的CategoricalArray构造函数和categorical函数在行为上似乎几乎相同:
julia> using CategoricalArrays
julia> x = CategoricalArray(["a", "b", "c"]; ordered=true, levels=["c", "b", "a"])
3-element CategoricalArray{String,1,UInt32}:
"a"
"b"
"c"
julia> y = categorical(["a", "b", "c"]; ordered=true, levels=["c", "b", "a"])
3-element CategoricalArray{String,1,UInt32}:
"a"
"b"
"c"
julia> x == y
true
Run Code Online (Sandbox Code Playgroud)
有没有之间的显着差异CategoricalArray和categorical?如果它们基本相同,那么包含冗余categorical功能的原因是什么?
我想要一些语法糖来打开Enum. 当然,一个if else块按预期工作:
@enum Fruit apple=1 orange=2 kiwi=3
function talk1(fruit::Fruit)
if fruit == apple
"I like apples."
elseif fruit == orange
"I like oranges."
else
"I like kiwis."
end
end
Run Code Online (Sandbox Code Playgroud)
我什至可以执行以下操作:
function talk2(fruit::Fruit)
say = ["I like apples.", "I like oranges.", "I like kiwis."]
say[Int(fruit)]
end
Run Code Online (Sandbox Code Playgroud)
但我不太喜欢 中的方法talk2,因为它分配了一个向量并且可读性较差。我尝试了Match.jl包,但我似乎无法匹配Enum:
using Match
function talk3(fruit::Fruit)
@match fruit begin
apple => "I like apples."
orange => "I like oranges."
kiwi => "I like kiwis." …Run Code Online (Sandbox Code Playgroud) 我不知道如何获得这种行为:
从这个矩阵:
julia> a = [1 1 1; 1 1 1; 1 1 2]
3×3 Array{Int64,2}:
1 1 1
1 1 1
1 1 2
Run Code Online (Sandbox Code Playgroud)
我想把所有的 1s 改为 5s,但只在最后一行。
我所做的是a[3, :][a[3, :] .== 1] .= 5但 a 的值没有改变。
我注意到:
foo[foo .== 1] .= 5
a[3, :] = foo
Run Code Online (Sandbox Code Playgroud)
它有效,但我正在尝试减少分配,应该删除它。
提前致谢
我对 Julia 很陌生,我正在尝试转换数组中的元组向量。这是一个例子
using Statistics
a = randn((10, 100))
q = (0.05, 0.95)
conf_intervals = [quantile(a[i,:], q) for i in 1:10]
Run Code Online (Sandbox Code Playgroud)
并且conf_intervals是一个10-element Vector{Tuple{Float64, Float64}}。
预期的结果应该是 10×2 Matrix{Float64}
我试过conf_intervals用,[conf_intervals...]但向量没有改变。
非常感谢
我在玩弄 Julia,我遇到了一个关于 Julia 使用的编译器/JIT 编译方案的问题。如果我写了一个函数,比如
function f(x)
return mapreduce(*,+,x,x)
end
Run Code Online (Sandbox Code Playgroud)
那么由于这个函数作用于抽象数组,所以它的形状直到被使用才能知道,所以它不能被编译。然后,如果在函数中使用它,g,其输入是浮点数组的数组,如下所示:
function g(y)
return mapreduce(f,+,y)
end
Run Code Online (Sandbox Code Playgroud)
或者替代地
function g2(y)
res = 0
for x in y
res = res + f(x)
end
return res
end
Run Code Online (Sandbox Code Playgroud)
然后,当我们使用时g,比如说g([[1,2],[3,4]]),最终f会被调用。说它首先被调用[1,2]。然后对其进行编译和评估。据我所知,因为f([3,4])与 完全相同的类型f([1,2]),f将被重用(因为输入都是二维数字数组)。但是,当我输入时@code_llvm(f([1,2])),@code_llvm(f([3,4]))我看到函数的名称是不同的(它们确实有一个共同的前缀,例如julia_f_,然后是一个数字)。此外,如果我@code_llvm(f([1,2]))再次打电话,我会得到另一个名字。
Julia 确实允许为每个应用程序g重用编译版本f吗?这是否取决于所涉及数组的长度?即g([w1,...,wn])每个wi都必须具有相同的长度f才能重复使用?
我希望能够以向量化的方式将一个元组数组喷射到一个函数中。例如,如果我具有以下功能,
function foo(x, y)
x + y
end
Run Code Online (Sandbox Code Playgroud)
和以下元组数组,
args_array = [(1, 2), (3, 4), (5, 6)]
Run Code Online (Sandbox Code Playgroud)
然后我可以使用列表推导来获得所需的结果:
julia> [foo(args...) for args in args_array]
3-element Array{Int64,1}:
3
7
11
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够对此操作使用点矢量化表示法:
julia> foo.(args_array...)
ERROR: MethodError: no method matching foo(::Int64, ::Int64, ::Int64)
Run Code Online (Sandbox Code Playgroud)
但是如您所见,该特定语法不起作用。有矢量化的方法可以做到这一点吗?