9

我必须编写自己的函数来绘制二项分布的密度函数,从而在 n = 20 和 p = 0.1,0.2,...,0.9 时绘制适当的图形。我还需要对图表发表评论。

我试过这个;

   graph <- function(n,p){
               x <- dbinom(0:n,size=n,prob=p)
               return(barplot(x,names.arg=0:n))
            }


   graph(20,0.1)
   graph(20,0.2)
   graph(20,0.3)
   graph(20,0.4)
   graph(20,0.5)
   graph(20,0.6)
   graph(20,0.7)
   graph(20,0.8)
   graph(20,0.9)

   #OR
   graph(20,scan())

我的第一个问题:有什么方法可以让我不需要graph(20,p)多次写下这一行,除了使用scan()

我的第二个问题:

我想在一个设备中查看图表或点击ENTER查看下一张图表。我写

   par(mfcol=c(2,5))
   graph(20,0.1)
   graph(20,0.2)
   graph(20,0.3)
   graph(20,0.4)
   graph(20,0.5)
   graph(20,0.6)
   graph(20,0.7)
   graph(20,0.8)
   graph(20,0.9)

但是图表太小了。我如何通过给出标题行 n=20 和 p=我用来绘制图形的值来很好地呈现图形?[虽然可以通过mtext()在调用函数后编写来完成,graph但这样做我必须编写类似的几行次。所以我想这样做,包括在函数中graph。]

我的最后一个问题:

关于评论。图表显示,随着成功概率 p 的增加,图表向右倾斜,即图表向右倾斜。

有没有办法使用 评论图表program

4

2 回答 2

8

这是一项工作,mapply因为您循环了 2 个变量。

graph <- function(n,p){
  x <- dbinom(0:n,size=n,prob=p)
  barplot(x,names.arg=0:n,
         main=sprintf(paste('bin. dist. ',n,p,sep=':')))
}
par(mfcol=c(2,5))
  mapply(graph,20,seq(0.1,1,0.1))

在此处输入图像描述

于 2013-07-20T09:51:04.267 回答
2

绘制基本图形是您经常想要使用for循环的时候之一。原因是大多数绘图函数都以不可见的方式返回对象,但您对这些不感兴趣;你想要的只是绘图的副作用。循环忽略返回的对象,而*apply家庭将浪费精力收集和返回它们。

par(mfrow=c(2, 5))
for(p in seq(0.1, 1, len=10))
{
    x <- dbinom(0:20, size=20, p=p)
    barplot(x, names.arg=0:20, space=0)
}
于 2013-07-20T12:49:42.153 回答