在R中的函数内顺序调用函数

Sequentially calling functions within function in R

如何创建同时调用一些预定义函数的函数?

例如我有 3 个不同的功能,例如

  1. 我的情节(数据)
  2. f模型(数据)
  3. 我的模型 <- f模型(数据)
    我的结论(模型=我的模型)

现在我想创建一个调用那些预定义函数(从 1 到 3)的新函数。我该怎么办?

我尝试执行如下操作并收到以下错误消息,但我不知道哪里出了问题。

P/s:我的模型涉及线性回归,我已经输入了 'data' 个参数。

myplot(mydata)
fmodel(mydata)
myconclusion(mymodel)

funlist <- list(
F1 = myplot
F2 = fmodel
mymodel <- fmodel  
F3 = myconclusion
)

callfun <- function(funrange, data, ...){
  for(i in funrange){
    funlist[[i]](...)
  }
}

callfun(1:3, data = mydata)

#Error in model.frame.default(formula = Y ~ X, data = mydata, drop.unused.levels = TRUE) : 
#argument "data" is missing, with no default 

运行 另一个函数中的 3 个函数应该执行它们,但是,根据函数实际执行的操作,可能没有任何 visible 输出。

f1 <- function(mydata, mymodel){
   
   myplot(mydata)
   fmodel(mydata)
   myconclusion(mymodel)

}

f1(mydata, mymodel)

同样,取决于这些函数的实际作用将决定输出。

编辑

给你举个例子

my_plot <- function(my_data){
  
   my_data %>% 
    ggplot(aes(mpg, hp))+
    geom_point()

}


my_model <- function(my_data){

  my_data %>% 
    lm(mpg ~ hp, data = .) %>% 
    summary

}


my_model_2 <- function(my_data){
  
  my_data %>% 
    lm(mpg ~ disp, data = .) %>% 
    summary
  
}


f1 <- function(my_data){

  my_plot(my_data)
  my_model(my_data)
  my_model_2(my_data)

}

如果您调用 f1(mtcars),您将看到的只是 my_model_2() 的输出,因为那是要执行的最后一个函数。 my_plot()my_model() 仍然执行,但您只是看不到结果,因为它所做的只是在查看器中预览绘图,或将模型摘要打印到控制台。

'see' 由 my_plot() 制作的情节的一种方法是更改​​它的功能,从在查看器中预览情节到保存情节的副本。可以这样做:

my_plot <- function(my_data){

  my_data %>% 
    ggplot(aes(mpg, hp))+
    geom_point()
  
  ggsave('my_saved_plot.png')

}

或者,将每个函数包装在 print 中会将模型摘要打印到控制台,并在查看器中显示绘图

f1 <- function(my_data){
  
  print(my_plot(my_data))
  print(my_model(my_data))
  print(my_model_2(my_data))
  
}