У меня есть простой вопрос о том, как R обрабатывает индексирование. У меня есть проблема в том, что если у меня есть вектор a , например, вектор строки, содержащий 100 чисел, и я хочу получить доступ к 7-му значению в этом векторе, простой способ сделать это быть просто написать [7], и я бы получил свою ценность. Тем не менее, если я хочу вместо этого использовать переменную (например, установить b <- 7 и затем написать a [b]), то иногда это даст мне [7], но в других случаях это даст мне значение в [[ 6]. См. Пример ниже: </p>
a <- c(1:100)
b <- 7
a[7]
7
a[b]
6
Если этой информации недостаточно, я буду рад опубликовать мой фактический код и контекст, в котором я сталкиваюсь с этой проблемой. Спасибо!
** РЕДАКТИРОВАТЬ **
Вот еще немного информации и фактический код, который заставляет меня чесать голову над этой проблемой.
Seed <- 1
SimTime <- 65 #Simulation time in seconds
TimeStep <- .1 #Time between sim outputs
set.seed(Seed)
TotalSteps <- SimTime/TimeStep
TransitionProbabilities <- matrix(rbind(c(0.18766224,2.168453e-19,1.023408e-06,1.953125e-02,0.7928055,6.939317e-18,7.275958e-12),c(0.28125801,7.818222e-03,1.274877e-01,3.671646e-04,5.791627e-01,3.906250e-03,4.579670e-16),c(0.61551744,0.1333229e-01,0,9.765625e-04,6.103516e-05,2.501221e-01,3.231174e-27),c(0.06738377,2.563524e-02,0.000000e+00,1.734723e-18,2.501335e-01,6.255039e-01,3.134356e-02),c(0.55078275,1.253358e-01,1.220703e-04,9.818187e-91,7.105427e-15,3.237305e-01,2.884867e-05),c(0.32425383,8.288771e-08,5.690945e-14,1.220708e-04,1.562500e-02,1.253128e-01,5.346862e-01),c(0.32425383,8.288771e-08,5.690945e-14,1.220708e-04,1.562500e-02,1.253128e-01,5.346862e-01)),nrow = 7,ncol=7)
SlopeMeanVar <- matrix(rbind(c(5.9572805,0.8660917),c(7.9495652,5.5765029),c(2.7789705,1.1488065),c(-0.1938019,1.8259470),c(-13.3744125,83.1549576),c(-127.0796007,8048.6051287),c(-69.1002577,118.1835389)),nrow = 7,ncol=2)
TimeMeanVar <- matrix(rbind(c(36.444228,326.1963044),c(10.170391,19.0602454),c(9.890028,15.4900072),c(2.269258,3.9720946),c(1.647609,1.1667697),c(1.033581,0.4013006),c(6.512817,24.2769279)),nrow = 7,ncol=2)
TotalTime <- 0
LoopCount <- 0
LastHeight <- 0
TrueVertexList <- c()
SlopeList <- c()
TimeList <- c()
PhaseList <- c()
TrendLength <- rep(0,TotalSteps*2)
TimeColumn <- seq(0,SimTime*2-TimeStep,.1)
StartIndicies <- c()
EndIndicies <- c()
while(TotalTime < SimTime){
LoopCount <- LoopCount + 1
if(LoopCount == 1){
#Choose first phase
Phase <- sample(c(1:7),1)
StartTime <- 0.1
StartIndex <- 2
}else{
#Choose next phase using transition probabilities based on LastPhase
Phase <- sample(c(1:7),1,prob = TransitionProbabilities[LastPhase,])
StartTime <- TotalTime + TimeStep
StartIndex <- StartTime*10+1
}
slope <- rnorm(1, mean = SlopeMeanVar[Phase,1], sd = sqrt(SlopeMeanVar[Phase,2]))
time <- round(rnorm(1, mean = TimeMeanVar[Phase,1], sd = sqrt(TimeMeanVar[Phase,2])),digits = 1)
EndTime <- StartTime + time - TimeStep
EndIndex <- (EndTime) * 10 + 1
TempTimeColumn <- seq(TimeStep,time,TimeStep)
TrendLength[StartIndex:EndIndex] <- TempTimeColumn*slope + LastHeight
TotalTime <- TotalTime + time
LastHeight <- TrendLength[EndIndex]
LastPhase <- Phase
SlopeList <- c(SlopeList,slope)
TrueVertexList <- c(TrueVertexList,TotalTime*10+1)
TimeList <- c(TimeList, time)
PhaseList <- c(PhaseList, Phase)
StartIndicies <- c(StartIndicies, StartIndex)
EndIndicies <- c(EndIndicies, EndIndex)
plot(TimeColumn[1:TotalTime*10+1],TrendLength[1:TotalTime*10+1],type='l')
}
> StartIndex
[1] 650
> TrendLength[StartIndex]
[1] 341.1459
> TrendLength[650]
[1] 337.7889
> TrendLength[649]
[1] 341.1459
Спасибо всем за любое руководство.