如何从终端运行 Julia 脚本和函数?

zlq*_*985 6 terminal julia

我正在学习 Julia 语言,并按照一些教程来测试 Julia 中的 OLS(普通最小二乘法)估计。首先,我需要模拟因变量(“Y”)、自变量(“X”)、误差项(epsilon)和参数的数据集。脚本是这样的:

\n\n
# ols_simulate \xef\xbc\x9agenerate necessary data\nusing Distributions\nN=100000\nK=3\ngenX = MvNormal(eye(K))\nX = rand(genX,N)\nX = X\'\nX_noconstant = X\nconstant = ones(N)\nX = [constant X]\n\ngenEpsilon = Normal(0, 1)\nepsilon    = rand(genEpsilon,N)\ntrueParams = [0.1,0.5,-0.3,0.]\nY = X*trueParams + epsilon \n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我定义了一个 OLS 函数

\n\n
function OLSestimator(y,x)\n    estimate = inv(x\'*x)*(x\'*y)\n    return estimate\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

我计划做的是首先使用命令模拟来自终端的数据:

\n\n
ols_simulate\n
Run Code Online (Sandbox Code Playgroud)\n\n

并希望这一步能够正确生成并存储数据,然后我就可以调用olsestimator. 但尝试此后,当我输入mean(Y)Julia REPL 时,它给了我一条错误消息,例如

\n\n
Error: UnderdefvarError: Y not defined\n
Run Code Online (Sandbox Code Playgroud)\n\n

看来数据没有正确存储。更一般地说,如果我有多个脚本(脚本和函数),我如何在终端中使用其中一个脚本生成的数据?

\n\n

谢谢。

\n

Dan*_*etz 7

每次运行 Julia REPL(Julia“命令行”)时,它都会从一个新的内存工作区开始。因此,要定义变量然后使用它们,您应该运行解释器一次。

如果我理解正确的话,您有多个脚本可以完成部分计算。要在 REPL 中运行脚本并保留在其中且所有全局变量仍然定义,您可以使用

include("scriptname.jl")
Run Code Online (Sandbox Code Playgroud)

scriptname更改为适当的.jl文件名)。

在这种情况下,工作流程可能如下所示:

include("ols_simulate.jl")
estimate = OLSestimator(Y,X)
mean(Y)
Run Code Online (Sandbox Code Playgroud)

一般来说,最好留在 REPL 中,除非您想清除所有内容并重新开始,然后退出并重新启动是可行的方法。