用一系列方程式创建R函数
我得到了关于创建具有相同类型方程的函数的帮助: 将此转换为:用一系列方程式创建R函数,r,function,parameters,arguments,stringr,R,Function,Parameters,Arguments,Stringr,我得到了关于创建具有相同类型方程的函数的帮助: 将此转换为: HS.model <- ' visual =~ x1 + x2 + x3 textual =~ x4 + x5 + x6 speed =~ x7 + x8 + x9 ' 上述函数仅使用“=~” 现在我想结合多种类型的方程,如“~~”和“~”。例如,方程式列表如下所示: model <- ' # latent variable definitions (l
HS.model <- ' visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9 '
上述函数仅使用“=~”
现在我想结合多种类型的方程,如“~~”和“~”。例如,方程式列表如下所示:
model <- '
# latent variable definitions (latvars)
ind60 =~ x1 + x2 + x3
dem60 =~ y1 + y2 + y3 + y4
dem65 =~ y5 + y6 + y7 + y8
# regressions (regress)
dem60 ~ ind60
dem65 ~ ind60 + dem60
# residual (co)variances (covars)
y1 ~~ y5
y2 ~~ y4 + y6
y3 ~~ y7
y4 ~~ y8
y6 ~~ y8
'
我试着这么做
myFunction <- function(...) {
params <- list(...)
lefts = params[seq(1,length(params), by=2)]
rights = params[seq(2,length(params), by=2)]
rights <- Map(paste, rights, collapse="+")
lefts2 = params[seq(3,length(params), by=2)]
rights2 = params[seq(4,length(params), by=2)]
rights2 <- Map(paste, rights2, collapse="+")
paste(paste0(lefts, " =~", rights), paste0(lefts2, " ~", rights2), collapse="\n")
}
myFunction您可以使用以下函数生成表达式。在这里,我试图简化代码和参数。如果您注意到,不同模型类型之间的唯一区别是传入的分隔符,lhs和rhs保持相似
这是一个共同的功能,它包含lhs和rhs以及分隔符,以分离lhs和rhs。通过更改分隔符,此功能可用于其他模型类型
input=list(
“视觉”=c('x1','x2','x3'),
'文本'=c('x4','x5','x6'),
“速度”=c('x7','x8','x9')
)
myFunc2=函数(变量、分隔符){
#变量是一个命名列表,其中名称是lhs,值是rhs
拉普拉(
列表(名称(变量)),
粘贴
lapply(变量、粘贴、折叠='+'),
sep=分离器
)
}
myFunc2(输入“=”)
#> [[1]]
#>[1]“视觉=x1+x2+x3”“文字=x4+x5+x6”“速度=x7+x8+x9”
由(v0.3.0)于2020-07-06创建
在不同型号上重复使用该功能:
latvars=list('ind60'=c('x2','x3'),sep='
回归=list('ind30'=c('x4','x5'),sep='~')
expr=列表(latvars,回归)
输出=c()
(我在1:2中){
输出[i]=myFunc2(expr[[i]][1],expr[[i]][[2]]
}
输出
#> [[1]]
#>[1]“ind60=x2+x3”
#>
#> [[2]]
#>[1]“ind30~~x4+x5”
由(v0.3.0)于2020-07-06创建的您得到的错误是什么?请注意,错误可能是由于您在myFunction
中传递参数的方式造成的。正如我从您的示例myFunction(latvars=('visual',c('x1','x2','x3')中所看到的那样
,您将参数错误地传递给命名参数latvars
。要么将其作为向量或列表传递。哦,我明白了。如何将其作为向量或列表传递?向量由c
构成,列表由list
构成?好的,我试试看。
model <- '
# latent variable definitions (latvars)
ind60 =~ x1 + x2 + x3
dem60 =~ y1 + y2 + y3 + y4
dem65 =~ y5 + y6 + y7 + y8
# regressions (regress)
dem60 ~ ind60
dem65 ~ ind60 + dem60
# residual (co)variances (covars)
y1 ~~ y5
y2 ~~ y4 + y6
y3 ~~ y7
y4 ~~ y8
y6 ~~ y8
'
myFunction(latvars = ("ind60", c("x1", "x2", "x3"),
"dem60", c("y1", "y2", "y3", "y4"),
"dem65", c("y5", "y6", "y7", "y8")),
regress = ("dem60", c("ind60"),
"dem65", c("ind60", "dem60")),
covars = ("y1", c("y5"),
"y2", c("y4", "y6"),
"y3", c("y7"),
"y4", c("y8"),
"y6", c("y8"))
)
myFunction <- function(...) {
params <- list(...)
lefts = params[seq(1,length(params), by=2)]
rights = params[seq(2,length(params), by=2)]
rights <- Map(paste, rights, collapse="+")
lefts2 = params[seq(3,length(params), by=2)]
rights2 = params[seq(4,length(params), by=2)]
rights2 <- Map(paste, rights2, collapse="+")
paste(paste0(lefts, " =~", rights), paste0(lefts2, " ~", rights2), collapse="\n")
}