我想知道如何将给定调用的任何输出重定向到文件,以便该文件准确包含通常显示在 REPL 中的内容。
我知道Suppressor.jl包是一个有趣的入口点,几乎可以满足我的需要,但例如:
using DataFrames
using Suppressor
output = @capture_out begin
dtf = DataFrame(
[8.04 9.14 7.46 6.58;
6.95 8.14 6.77 5.76;
8.33 9.26 7.81 8.47])
dtf
end
Run Code Online (Sandbox Code Playgroud)
在输出中不捕获任何内容(或者更准确地说,它捕获"")。为了能够捕获输出,我们必须在这个代码块中编写print(dtf)而不是(而简单的指令实际上会在 REPL 中产生输出)。所以看来这个宏无法捕获任何输出。dtfdtf@capture_out
实际上,当我向 Julia 发送给定的代码块时,我需要将控制台中显示的所有内容重定向到给定的文件:正常输出或错误消息。
实现这一目标的最佳/最简单方法是什么?并且,如果可能的话,对包的依赖最小化?
我尝试了解如何使用 MultivariateStats.jl 包在 Julia 中执行简单的探索性 PCA。
\n例如,在 R 中,可以执行以下操作:
\nlibrary(FactoMineR)\ndata(iris)\n\n## PCA model:\nres_pca <- PCA(iris, quali.sup = 5, graph = FALSE)\n## Retrieve coordinates of individuals on all 4 PCs:\nres_pca$ind$coord\n## Simple plots:\nplot(res_pca, choix = "ind", habillage = 5)\nplot(res_pca, choix = "var")\nRun Code Online (Sandbox Code Playgroud)\n我没有设法在 Julia 中获得这些非常基本的操作的任何等效项(我的意思是使用 MultivariateStats.jl 中的“本机”函数)。让我们从以下开始:
\nusing MultivariateStats\nusing RDatasets\n\niris = dataset("datasets", "iris")\n\n## PCA model:\nM = fit(PCA, Array(iris[:, 1:4]); pratio=1, maxoutdim=4)\nRun Code Online (Sandbox Code Playgroud)\n一旦我获得了 PCA“模型” M,我如何轻松检索个人坐标?如何轻松显示相关圈等?
据我了解,从准机器学习的角度来看,PCA 在 Julia 中作为一种“模型”实现,并且基本上无法提供轻松显示探索性 PCA 中通常需要的所有常用图表、统计数据和见解的方法?(我的意思是,cos\xc2\xb2、贡献等)
\n是否还有其他更面向探索性多变量分析的 Julia 包,可以提供与 FactoMineR 或 …
警告:这些都是菜鸟问题,因为我对 Julia真的很陌生。
在 R 中,有一个相当“统一”的函数来导出(几乎)任何类型的对象read.table()。看起来 Julia 的情况稍微复杂一些。如果我理解得很好:
某些标准类型(例如,数组、字典和元组)总是可以用 导出writedlm,但不能总是用导出CSV.write。相反,DataFrames 总是可以用 导出CSV.write,但永远不能用writedlm. 这样对吗?因此,不存在类似于 R 的“通用导出器” write.table()?
随着写入 CSV 文件,CSV.write似乎还返回导出文件的名称。相反,writedlm不会。这对我来说是个问题。实际上,我需要一种方法将 DataFrame 导出到带有不返回值的函数的 CSV 文件中,即只有副作用的函数,例如writedlm. 有什么办法可以在 Julia 中实现这一目标吗?
编辑:要详细了解,我的问题是在 aCSV.write之后ans指向导出文件的名称;而情况并非如此writedlm。这里和这里的插图。即使有@Przemyslaw Szufel 给出的想法,我也无法摆脱这一点。(这是一个相当微妙的问题,但我实际上是在尝试为 Julia 编写一个 emacs lisp 后端。这种不一致,例如在导出对象后不知道是answillnothing还是文件名,在这次冒险中增加了一些痛苦。 .. :-) 理想情况下,我只是希望CSV.write可以保持沉默。)
谢谢!