Я новичок в R и StackOverFlow. Так что, если я что-то упускаю, пожалуйста, дайте мне знать. Я работаю над моделированием неоднородных процессов, чтобы лучше понять поведение нейронов. Мой код работает таким образом, что у меня есть, скажем, 20
испытаний продолжительностью 2
секунд каждое (каждое испытание представляет собой поезд шипов). Затем список SpikeTimes
дает мне список 20
векторов, где каждый вектор соответствует меткам времени, где произошли пики в этом конкретном испытании. [Например, SpikeTimes[1]
, который выглядит так, 0.002250802 0.053934034...1.971574170 2.023090384
означает, что в первом поезде шипов всплески произошли в 0.002250802
, 0.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
в начале, но в результате в списке был только 21 вектор вместо 20 с вектором 0
в качестве первого элемента (я имею в виду, что понимаю, почему это произошло). Как я могу сделать это так, чтобы мой код не замедлялся? Я новичок в R, и чтение в Интернете не помогло решить эту конкретную проблему. Я был бы признателен за любой вклад.
NonHomoSpikes
return
наreturn(c(0, X, 2))
- person pieca   schedule 11.05.2018SpikeTimes
в2
? Прямо сейчас, как показано в примере, он также включает некоторые экземпляры времени между2.0
и2.1
в качестве последних записей. Если бы вы могли дать несколько советов по этому поводу, это действительно помогло бы мне. - person TimeLord   schedule 11.05.2018if(t > 2) break
после строкиt <- LambdaInv(s)
- person pieca   schedule 11.05.2018