r:如何使函数返回按par()排列的两个绘图对象

r:如何使函数返回按par()排列的两个绘图对象,r,function,plot,R,Function,Plot,因此,我不熟悉函数,我正在尝试创建一个简单的函数,它返回由par()排列的两个绘图,如 par(mfrow=c(1,2), mar=c(5,5,2,2)) hist(p$vitd, col='lightgray', prob=T) lines(density(p$vitd), lwd=2) curve(dnorm(x, mean=mean(p$vitd), sd=sd(p$vitd)), col="red", lwd=2, add=TRUE) qqnorm(p

因此,我不熟悉
函数
,我正在尝试创建一个简单的
函数
,它返回由
par()
排列的两个绘图,如

par(mfrow=c(1,2), mar=c(5,5,2,2))
hist(p$vitd,  col='lightgray', prob=T)
lines(density(p$vitd), lwd=2)
curve(dnorm(x, mean=mean(p$vitd), sd=sd(p$vitd)), 
      col="red", lwd=2, add=TRUE)
qqnorm(p$vitd) 
qqline(p$vitd)
给出预期输出:

所以我只能知道如何返回一个对象


这就是你想做的吗


基本图形函数通常不返回图形对象:绘图部分是调用函数的副作用。许多绘图函数返回一个(非图形)对象,该对象可用于重新生成绘图,和/或它包含有关处理的好消息(例如,
图例
返回其边界框)。此外,一个函数只能返回一个“东西”;通常,当异类数据返回时,它作为一个命名列表。您需要返回的图形对象用作什么?您好@r2evans-谢谢您的输入。只是想学习一下
函数
。我在这里的意图是生成一个函数,以获得一个遵循正态分布的协变量的快速概览
norm\u f(p$vitd)
运行时返回一个图形。它不是返回图形,而是产生副作用的绘图。您可以随意创建每个图形函数返回对象的
列表
,但要知道它们并不一致,有些只是
NULL
。同样,你希望用这个返回值做什么?我的目标是编写一个函数
norm\u f(x)
,它生成两个
x
图(上面描述的
直方图和
qq图)。可以这样做吗?编写生成两个绘图的函数与返回两个绘图的概念完全不同。使用基本图形,后者是不可能的,但前者肯定是。“函数”的前提是正确的,但R基图形函数返回“绘图”的假设是错误的。大多数基本图形函数不返回绘图;如果他们返回任何东西,那么这个“东西”可能是可以重复使用以重新生成情节的东西,但这既不是标准,也不是同一件事。是的,非常感谢。
norm_f <- function(y){
  
list(qqnorm(y),qqline(y))
  
}

norm_f(p$vitd)
norm_f <- function(y){
  
list(hist(y,  col='lightgray', prob=T),
     lines(density(y), lwd=2),
     curve(dnorm(x, mean=mean(y), sd=sd(y)), 
           col="red", lwd=2, add=TRUE))
  
}

norm_f(p$vitd)
p <- structure(list(vitd = c(28.5, 32.9, 60.3, 50.5, 15, 47.8, 78.7, 
16.3, 71.9, 32.1, 33.2, 20.3, 33.5, 25.3, 89.8, 39.8, 27.6, 15.1, 
61.8, 50.8, 72.1, 13.1, 18.3, 67.1, 60.2, 53.7, 54.6, 11.4, 48.5, 
78.1, 29.1, 55.4, 75.1, 69.3, 91.2, 19.7, 26.9, 54.5, 25, 84.4, 
15.6, 76.6, 45, 39.4, 67.6, 53.9, 93.6, 43.9, 25.8, 49.6, 46.1, 
46.5, 57.3, 61.4, 29.8, 67.8, 64.4, 59.4, 44, 58.8, 5.2, 23.8, 
26.7, 42.3, 19.9, 72.4, 54.2, 69.5, 70.1, 22.1, 46.3, 52.2, 61.7, 
50.7, 46.9, 28, 29.4, 29.7, 72.4, 96.6, 55.5, 36.2, 36.2, 61.8, 
76.7, 43.5, 41.9, 76.8, 90, 44.4, 33, 46, 28.2, 47.7, 40.7, 41.4, 
53.2, 53.9, 35.3, 14.9)), row.names = c(NA, 100L), class = "data.frame")