【发布时间】:2021-11-04 00:53:01
【问题描述】:
我正在使用Pingouin.jl 来测试正常性。
在他们的docs 中,我们有
dataset = Pingouin.read_dataset("mediation")
Pingouin.normality(dataset, method="jarque_bera")
对于数据集中的每个name,它应该返回一个DataFrame 正常true 或false。
目前,此广播已弃用,我无法将每个唯一列输出(正在工作并输出一个 DataFrame)的结果连接到一个 DataFrame 中。
所以,我到目前为止所拥有的。
function var_norm(df)
norm = DataFrame([])
for i in 1:1:length(names(df))
push!(norm, Pingouin.normality(df[!,names(df)[i]], method="jarque_bera"))
end
return norm
end
我得到的错误:
julia> push!(norm, Pingouin.normality(df[!,names(df)[1]], method="jarque_bera"))
ERROR: ArgumentError: `push!` does not allow passing collections of type DataFrame to be pushed into a DataFrame. Only `Tuple`, `AbstractArray`, `AbstractDict`, `DataFrameRow` and `NamedTuple` are allowed.
Stacktrace:
[1] push!(df::DataFrame, row::DataFrame; promote::Bool)
@ DataFrames ~/.julia/packages/DataFrames/vuMM8/src/dataframe/dataframe.jl:1603
[2] push!(df::DataFrame, row::DataFrame)
@ DataFrames ~/.julia/packages/DataFrames/vuMM8/src/dataframe/dataframe.jl:1601
[3] top-level scope
@ REPL[163]:1
编辑:push! 函数在我的第一个版本的帖子中没有正确编写。但是,更改后错误仍然存在。如何将 Pingouin 中 DataFrame 类型的输出重新格式化为 DataFrameRow?
【问题讨论】:
-
我以前没有使用过
Pingouin,但是您可能以错误的方式使用push!的参数,因为我看到您正试图将其分配给norm。如果您写push!(norm, ...),它将就地修改norm。 -
我改了;但是,问题仍然相同。基本上,将
DataFrame类型转换为DataFrameRow。 -
你能试试推
only(Pingouin.normality(…))吗?如果Pengouin.normality返回一个只有一行的数据帧,only应该返回该行,从而允许您推入DataFrame。 -
如果它没有返回一行,你会想要推送
eachrowPengouin.normality返回的内容(在另一个for循环中,或使用foreach) -
请发表评论,以便我接受您的回答。这是正确的。我刚刚测试过了!谢谢。
标签: dataframe for-loop julia pingouin