小编Cam*_*nek的帖子

从公式中删除响应变量

有没有一种简单的方法可以从公式中删除响应变量?我试过使用stats::update.formula,像这样:

update(y ~ x, ~ .)
# y ~ x
Run Code Online (Sandbox Code Playgroud)

但是你可以看到上面没有从公式中删除响应变量。

r

5
推荐指数
1
解决办法
166
查看次数

用引号结束三重引号字符串文字时,“错误:语法:不能并列字符串文字”

我正在尝试创建一个字符串文字,表示带有带引号的字段的 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)

julia

5
推荐指数
1
解决办法
1182
查看次数

使用 tidymodels 配方包添加缺失的指标列

我想使用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 中实现。

r r-recipes tidymodels

5
推荐指数
1
解决办法
363
查看次数

使用 Julia StatsPlots 绘制数据帧

这有效:

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)

是真的。

谁能解释为什么?我真的不想单独输入所有符号......

plot dataframe julia

5
推荐指数
1
解决办法
306
查看次数

如何在 Julia 中全局使用 for 循环中的数组?

我正在用 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)

请建议解决此问题。

问候,

for-loop global-variables dataframe julia

5
推荐指数
1
解决办法
65
查看次数

`CategoricalArray` 构造函数和 `categorical` 函数之间的区别

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)

有没有之间的显着差异CategoricalArraycategorical?如果它们基本相同,那么包含冗余categorical功能的原因是什么?

julia

5
推荐指数
1
解决办法
42
查看次数

用于与 Enum 进行开关或模式匹配的宏

我想要一些语法糖来打开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)

enums julia

4
推荐指数
2
解决办法
530
查看次数

使用双索引在矩阵中赋值

我不知道如何获得这种行为:

从这个矩阵:

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

4
推荐指数
1
解决办法
45
查看次数

如何检查对象定义在哪个模块中?

如果我有一个对象(比如一个方法、一个结构或一个类型,用 导入using),我怎样才能获得它最初定义的模块?

julia

4
推荐指数
1
解决办法
29
查看次数

在 JULIA 中转换数组中的元组向量

我对 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

4
推荐指数
2
解决办法
350
查看次数

在 Julia 语言中,函数编译是如何复用的?

我在玩弄 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才能重复使用?

julia

4
推荐指数
1
解决办法
77
查看次数

矢量喷溅

我希望能够以向量化的方式将一个元组数组喷射到一个函数中。例如,如果我具有以下功能,

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)

但是如您所见,该特定语法不起作用。有矢量化的方法可以做到这一点吗?

julia

3
推荐指数
1
解决办法
91
查看次数

标签 统计

julia ×10

dataframe ×2

r ×2

enums ×1

for-loop ×1

global-variables ×1

plot ×1

r-recipes ×1

tidymodels ×1