2

100個の要素のベクトルを出力するシミュレーション関数を作成しました。この関数を使用して*apply関数を何度も実行し、シミュレーションを実行するたびに繰り返される出力を新しいベクトルに格納したいと思います。

関数は次のようになります。

J <- c(1:100)
species_richness <- function(J){
   a <- table(J)
   return(NROW(a))
}

simulation <- function(J,gens,ploton=FALSE,v=0.1){
    species_richness_output <- rep(NA,gens)
    for(rep in 1:gens){
        index1 <- sample(1:length(J),1)

        if(runif(1,0,1) < v){
           J[index1] <- (rep+100)
        } 
        else{
           index2 <- sample(1:length(J),1)
           while(index1==index2) {
               index2 <- sample(1:length(J),1)
           }
           J[index1] <- J[index2]
        }
        species_richness_output[rep] <- species_richness(J)
    }

    species_abundance <- function(J){
       a <- table(J)
       return(a)
    }

    abuntable <- species_abundance(J)
    print(abuntable)

    octaves <- function(abuntable){
       oct <- (rep(0,log2(sum(abuntable))))

       for(i in 1:length(abuntable)){
          oct2 <- floor(log2(abuntable[i])+1)
          oct[oct2] <- oct[oct2]+1
       }

       print(oct)
    }   

    # octaves(c(100,64,63,5,4,3,2,2,1,1,1,1))


    if(ploton==TRUE){
       hist(octaves(abuntable))
    }
    print(species_richness(J))

    return(J)
}

simulation(J, 10000,TRUE,v=0.1)

これが私の関数です。前に定義したベクトルをJに取り、それを操作して、次を返します。100要素の新しくシミュレートされたベクトルJは、新しいベクトルを上記の「オクターブ」に対応するヒストグラムに分類するオクターブと呼ばれる関数です。

私はいくつかのバリエーションを試しました:使用lapplymapply パッティングargs=args_from_original_simulation

simulation_repeated <- c(mapply(list, FUN=simulation(args),times=10000))

しかし、mapply関数のmatch.fun部分でエラーが発生し続けます

Error in match.fun(FUN) : 
  'simulation(J, 10000, FALSE, 0.1)' is not a function, character or symbol

これは、私が書いたシミュレーションがワークスペースに関数として保存されていることを示しているにもかかわらずです。

このエラーが何を指しているのか誰か知っていますか?

4

1 に答える 1

1

この行で:

simulation_repeated <- c(mapply(list, FUN=simulation(args),times=10000))

mapplyする関数を与えていません。あなたは(本質的に)呼び出しの結果を渡しておりsimulation(args)simulation関数を返しません。

于 2013-01-24T23:50:23.930 に答える