在R中的函数内顺序调用函数
Sequentially calling functions within function in R
如何创建同时调用一些预定义函数的函数?
例如我有 3 个不同的功能,例如
- 我的情节(数据)
- f模型(数据)
- 我的模型 <- 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))
}
如何创建同时调用一些预定义函数的函数?
例如我有 3 个不同的功能,例如
- 我的情节(数据)
- f模型(数据)
- 我的模型 <- 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))
}