1

我写了一个掷硬币的小模拟:

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)

我想将箱线图绘制为参数的函数。我有一个数据框:

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 ...

当频率根据重复大小绘制时,我得到: 频率与投掷次数 如何使用箱线图而不是点数?下面的想法失败了:

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]'
4

1 回答 1

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)
于 2013-09-25T13:09:30.163 回答