绘制箱图作为参数的函数(抛硬币和频率波动)

时间:2013-09-25 13:07:02

标签: r boxplot

我写了一小笔硬币投币:

frequencePile <- function(repetition)
{
  lances <- sample(0:1,repetition,rep=T)
  piles <- sum(lances)
  freqP <-piles/length(lances)
  return(freqP)
}
###################
essais <- function(Nessais, rep){
  frequences <-{}
  for (e in 1:Nessais)
    {
    frequences <-c(frequences, frequencePile(rep))
  }
  return(frequences)
}
##################
effetRepvsFluct <- function (repetitionMin,repetitionMax, step,TailleEssai){
  ###créons un data frame vide~ feuille de calcul
  sim <- data.frame()
  essai<-TailleEssai
  for (r in seq(repetitionMin,repetitionMax,step)){
    df <- data.frame(r,essais(essai,r))
    sim <-rbind(sim,df)
  }
  return(sim)
}

NRepetition <-500
Nessais <- 300


fp<-frequencePile(NRepetition)
print (fp)
essai1 <-essais(Nessais,NRepetition)

#### Effet  repetition sur la fluctuation ####
TailleEssai<-200
repetitionMin<-10
repetitionMax<-500
repetitionPas<-10
simPF <- effetRepvsFluct(repetitionMin,repetitionMax,repetitionPas,TailleEssai)
colnames(simPF)<-c("répétition","fréquence")

plot(simPF)

我希望将boxplot绘制为参数的函数。我有一个数据框:

str(simPF)
'data.frame':   10000 obs. of  2 variables:
 $ répétition: num  10 10 10 10 10 10 10 10 10 10 ...
 $ fréquence : num  0.6 0.4 0.5 0.3 0.1 0.3 0.5 0.7 0.3 0.3 ...

当频率按重复大小绘制时,我得到: freq vs number of toss 如何使用boxplot而不是积分?以下想法失败了:

boxplot(simPF[2]~simPF[1], simPF)
Erreur dans model.frame.default(formula = simPF[2] ~ simPF[1], data = simPF) : 
  invalid type (list) for variable 'simPF[2]'

1 个答案:

答案 0 :(得分:2)

使用[[而非[

boxplot(simPF[[2]]~simPF[[1]])

在列表或数据框中,[将返回另一个列表或数据框,就像向量上的[将返回另一个向量一样。

str(simPF[1])
# 'data.frame': 10000 obs. of  1 variable:
# $ répétition: num  10 10 10 10 10 10 10 10 10 10 ...

另一方面,[[将从数据框中返回列表或单个列的单个元素。

str(simPF[[1]])
# num [1:10000] 10 10 10 10 10 10 10 10 10 10 ...

您收到错误消息是因为您传入了数据框([的结果)而不是向量。

更好的是,只需使用列的名称:

boxplot(fréquence~répétition, simPF)