我想在Julia中使用来自R中lme4库的lmer函数获得相同的结果.请在下面找到使用R的内置mtcars数据集的示例
library(lme4)
data<-mtcars
data$vs<-as.factor(data$vs)
data$am<-as.factor(data$am)
data$gear<-as.factor(data$gear)
str(data)
model <- lmer(mpg ~ cyl:gear + hp:am + (1|gear:am), data = data)
Run Code Online (Sandbox Code Playgroud)
我已经找到了lmm()
来自Julia的MixedModels包的函数,它应该能够运行相同的结果,但是我不知道如何从lmer()
函数的第一个参数重写公式lmm()
.特别是interaction(:)运算符.
我将以简短的例子回答你的问题.
在以下情况下,有两种方法可以过滤DataFrame:
1. df = df[((df[:field].==1) | (df[:field].==2)), :]
2. df = df[[in(v, [1, 2]) for v in df[:field]], :]
Run Code Online (Sandbox Code Playgroud)
第二种方法比较慢,但适用于条件可变的一组值。我有没有想念的语法糖,所以我可以像第一种方法一样快但有一些类似in
的构造吗?
我知道在各种编程语言中有一种块语法来简化对对象字段的过多引用的表达式
例如在VB中,可以使用以下描述的块连接:
通过使用With ... End With,您可以对指定对象执行一系列语句,而无需多次指定对象的名称.在With语句块中,您可以指定以句点开头的对象成员,就像With语句对象在其前面一样.
我想在朱莉娅做这样的事情:
With theCustomer
.Name = "Coho Vineyard"
.URL = "http://www.cohovineyard.com/"
.City = "Redmond"
End With
Run Code Online (Sandbox Code Playgroud)
或者可能:
@With data .a=.b+c*d
在Julia中有一个与Block相当的块吗?
我有不同的数学表达式集,必须在运行时进行评估.目前,通过用等效值和eval
结果替换符号来完成任务.(可以通过任何现有的符号包完成)
现在,请参阅Julia-lang中模块的定义:
Julia中的模块是单独的变量工作空间,即它们引入了一个新的全局范围....模块允许您创建顶级定义(也称为全局变量),而不必担心当您的代码与其他人一起使用时的名称冲突.
由于Julia的功能可以做元数据,
我想知道是否可以在运行时创建匿名模块m=Module()
,并将它们用作评估表达式的范围eval(m, :(a+b))
.
但我根本找不到将变量加载到运行时模块的方法.虽然我可以得到结果:
julia> ex=:(module mo; a=1; b=4; end)
julia> eval(ex)
julia> eval(mo,:(a+b))
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用匿名模块的更多功能方式.
任何帮助.
我知道在julia中创建二元运算符重载很容易,例如
+(x,y)= x*y
我也知道a [i]是getindex和setindex的缩写!
我想知道如何重载子数组运算符,例如
一个[I,J,:,3:]
我相信这只是一个被调用的函数,但我无法找到它的名字