0

私はRとStackOverFlowが初めてです。ですから、何か足りないものがある場合は、お知らせください。神経の振る舞いをよりよく理解するために、不均一なプロセスをシミュレートすることに取り組んでいます。私のコードは、私が持っている方法で動作します。たとえば、20試行はそれぞれ数秒続き2ます (各試行はスパイクトレインを表します)。次に、リストSpikeTimesには20ベクトルのリストが表示されます。各ベクトルは、その特定の試行でスパイクが発生した場所のタイムスタンプに対応しています。[例えば。SpikeTimes[1]これは0.002250802 0.053934034...1.971574170 2.023090384、最初のスパイク トレインで でスパイクが発生したことを意味0.0022508020.053934034ます。2制限時間の秒数を超えてタイムスタンプが表示される理由はわかりませんが、後で作業します]。私のコードは次のようになります--

nTrials=20
t_max=2.0000000


LambdaInv<- function(x){ifelse( x< 15, x/30,
                    ifelse(x >= 15 & x < 38, ((x-15)/46)+0.5,
                           ifelse(x >= 38 & x <53, ((x-38)/30)+1.0,
                                  ifelse(x >= 53 & x< 67.4, ((x-53)/72)+1.5, 
                                         ((x-67.4)/30)+1.7))))}

 t = 0 
 s = 0
 X = numeric(0)


 NonHomoSpikes <- function(t_max){
  while(t <= t_max){
    u <- runif(1)
    s <- s-log(u)
    t <- LambdaInv(s)
    X <- c(X,t)
       }
    return(X)
   }


SpikeTimes <- lapply(1:nTrials, function(x) NonHomoSpikes(2))

私の問題は、リスト内の各ベクトルについてSpikeTimesです。これはスパイクのタイム スタンプを提供しますが、スパイク列の開始 (つまり0) と終了 (つまり )も含めたいと考えています。2したがって、このリストを追加して、各ベクトルに最初のエントリが として含まれ0、最後のエントリが として含まれるようにし2ます。

私の場合は次のSpikeTimes[1]ように見え0 0.002250802 0.053934034...1.971574170 2、他の人SpikeTimes[i]は同様に見えます。SpikeTimes <- c(0, SpikeTimes)最初に入力しようとし0ましたが、最初の要素としてベクトルを使用して、リストに20個ではなく21個のベクトルしかありませ0んでした(なぜそれが起こったのかがわかります)。コードが遅くならないようにするにはどうすればよいですか? 私はRの初心者であり、インターネットで読んでもこの特定の問題の解決にはなりません。あらゆる種類の入力をいただければ幸いです。

4

1 に答える 1