我是 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
)。所以我想附加这个列表,让每个向量包含第一个条目 as0
和最后一个条目 as 2
。
然后我的SpikeTimes[1]
看起来0 0.002250802 0.053934034...1.971574170 2
和其他SpikeTimes[i]
看起来相似。我尝试在开头SpikeTimes <- c(0, SpikeTimes)
输入0
,但它只使列表有 21 个向量而不是 20 个向量0
作为第一个元素(我的意思是我明白为什么会发生这种情况)。我怎样才能以一种不会使我的代码变慢的方式来做到这一点?我是 R 的新手,在互联网上阅读对这个特殊问题没有帮助。我将不胜感激任何形式的投入。