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

Terminal 如何从终端运行Julia脚本和函数?,terminal,julia,Terminal,Julia,我正在学习Julia语言,并按照一些教程在Julia中测试OLS(普通最小二乘)估计。首先,我需要模拟一个由因变量(“Y”)、自变量(“X”)、误差项(ε)和参数组成的数据集。脚本如下所示: # ols_simulate :generate necessary data using Distributions N=100000 K=3 genX = MvNormal(eye(K)) X = rand(genX,N) X = X' X_noconstant = X constant = ones(

我正在学习Julia语言,并按照一些教程在Julia中测试OLS(普通最小二乘)估计。首先,我需要模拟一个由因变量(“Y”)、自变量(“X”)、误差项(ε)和参数组成的数据集。脚本如下所示:

# ols_simulate :generate necessary data
using Distributions
N=100000
K=3
genX = MvNormal(eye(K))
X = rand(genX,N)
X = X'
X_noconstant = X
constant = ones(N)
X = [constant X]

genEpsilon = Normal(0, 1)
epsilon    = rand(genEpsilon,N)
trueParams = [0.1,0.5,-0.3,0.]
Y = X*trueParams + epsilon 
然后我定义了一个OLS函数

function OLSestimator(y,x)
    estimate = inv(x'*x)*(x'*y)
    return estimate
end
我计划首先用命令模拟终端的数据:

ols_simulate
希望这一步正确地生成和存储数据,然后我可以调用
olsestimator
。但是尝试了这个之后,当我在juliarepl中键入
mean(Y)
时,它会给我一条错误消息,如

Error: UnderdefvarError: Y not defined
数据似乎没有正确存储。更一般地说,如果我有多个脚本(脚本和函数),如何使用终端中一个脚本从其他脚本生成的数据


谢谢。

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

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

include("scriptname.jl")
(将
scriptname
更改为相应的
.jl
文件名)

在这种情况下,工作流可能类似于:

include("ols_simulate.jl")
estimate = OLSestimator(Y,X)
mean(Y)

通常,最好留在REPL中,除非您想清除所有内容并重新开始,然后退出并重新启动。您需要将脚本保存在单独的文件中,然后将其加载到Julia中。假设您已经在目录“dir1”中以名称“ols_simulate.jl”保存了它,然后导航到终端中的该目录,即startup Julia(您可能希望看到)。一旦进入Julia,您必须加载“ols_simulate.jl”,然后您可以计算
Y
的平均值并执行任何您想要的操作:

include("ols_simulate.jl")
mean(Y)
OLSestimator(Y, X)

对于我认为您正在做的这类事情,我认为您可以使用笔记本界面,如。

include技巧很有用,谢谢。还有一个问题,我是否应该将带有任意文件名(比如
OLSestimator.jl
)的函数脚本保存到当前字典中,然后从REAL调用它。我就是这么做的,但结果是另一个未定义的错误。关于Julia函数的可用示例主要是命令行函数,我的问题归结为“如何调用函数?”理解您的问题有点困难。我想,“dictionary”应该是“directory”,而“REAL”应该是“REPL”。不过,稍微清楚一点你实际上在做什么和看到什么会有所帮助。如果您收到错误,请引用整个错误消息。