如何解决如何将函数转换为管道友好函数?
我正在尝试将以下函数转换为对管道友好的函数。但它是由字符串组成的。我不知道从哪里开始。
library(MplusAutomation)
pathmodel <- mplusObject(
TITLE = "MplusAutomation Example - Path Model;",MODEL = "
mpg ON hp;
wt by disp drat;",OUTPUT = "CINTERVAL;",rdata = mtcars)
我已经尝试过这种格式,但我不确定哪个不起作用,我不确定如何创建它以便它与管道一起工作。
mplus <- function(data,title,on,by,output) {
mplusObject(TITLE = as.character(title),MODEL = paste(on,"/n",by),OUTPUT = as.character(output),rdata = data)
}
这就是我最终想要达到的目标。
mplus %>%
data(mtcars) %>%
title("example - path model") %>%
predictors("mpg on hp") %>%
latentvars("wt by disp drat") %>%
output(cinterval)
解决方法
这就是你可以做的来使这个函数动态化:
mplus <- function(data,title,on,by,output) {
mplusObject(TITLE = title,MODEL = paste(on,"/n",by),OUTPUT = output,rdata = data)
}
然后将其称为:
mtcars %>%
mplus("example - path model","mpg on hp","wt by disp drat","CINTERVAL")
,
如果你想拥有 pipable 功能,那么你需要一个 pipeble 对象。在这里,我们只是存储 a 列表中的值。类似的东西
new_mplus <- function(data=NA) {
x <- list(TITLE=NA,MODEL=NA,OUTPUT=NA,predictors=NA,latent=NA,rdata=data)
class(x) <- "mplus"
x
}
is_mplus <- function(x) {
"mplus" %in% class(x)
}
mplus <- function(data) {
stopifnot(is.data.frame(data))
new_mplus(data)
}
title <- function(x,title) {
stopifnot(is_mplus(x))
x$TITLE <- title
x
}
predictors <- function(x,predictors) {
stopifnot(is_mplus(x))
x$predictors <- predictors
x
}
latentvars <- function(x,latent) {
stopifnot(is_mplus(x))
x$latent <- latent
x
}
output <- function(x,output) {
stopifnot(is_mplus(x))
x$OUTOUT <- output
x
}
然后你用
调用它mtcars %>%
mplus() %>%
title("example - path model") %>%
predictors("mpg on hp") %>%
latentvars("wt by disp drat") %>%
output("cinterval")
该列表将记录您的所有价值观。然后你只需要有一个函数来执行它
execute <- function(x) {
mplusObject(TITLE = x$TITLE
MODEL = paste(x$predictors,x$latent),OUTPUT = x$OUTPUT,rdata = x$data)
}
mtcars %>%
mplus() %>%
title("example - path model") %>%
predictors("mpg on hp") %>%
latentvars("wt by disp drat") %>%
output("cinterval") %>%
execute()
管道都是关于将对象从一个函数传递到下一个函数,因此您需要某种对象来传递以存储所有值。使用 dplyr
传递一个 tibble
,使用 ggplot2
创建一个 ggplot
对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。