В дополнение к предыдущему комментарию в сценарии matlab происходит несколько вещей, которых нет в R:
[tarr; tarr(i, :)-log(rand(1, nproc))/lambda];
Насколько я понимаю, вы добавляете еще одну строку в матрицу и заполняете ее tarr(i, :)-log(rand(1, nproc))/lambda]
.
Вам нужно будет использовать другой метод, так как Matlab и R по-разному обрабатывают этот тип вещей.
- Одна бросающаяся в глаза вещь, которая выделяется для меня, это то, что вы, кажется, используете
R: tarr[i]
и M: tarr(i, :)
как равные, где они очень разные, так как я думаю, что вы пытаетесь достичь, это все столбцы в данном строка i
, поэтому в R это будет выглядеть как tarr[i, ]
- Теперь использование
min
также отличается, поскольку R: min()
возвращает минимум матрицы (только одно число), а M: min()
возвращает минимальное значение каждого столбца. Так что для этого в R вы можете использовать Rfast
пакет Rfast::colMins
.
- Часть
stairs
- это то, с чем я не очень хорошо знаком, но что-то вроде ggplot2::qplot(..., geom = "step")
может работать.
Теперь я попытался создать что-то, что работает в R, но на самом деле не уверен, каков требуемый вывод. Но, тем не менее, надеюсь, что некоторые из основ помогут вам сделать это на вашей стороне. Ниже приведена краткая попытка чего-то достичь!
nproc <- 40
T0 <- 3
lambda <- 4
i <- 1
tarr <- matrix(rep(0, nproc), nrow = 1, ncol = nproc)
while(min(tarr[i, ]) <= T0){
# Major alteration, create a temporary row from previous row in tarr
temp <- matrix(tarr[i, ] - log((runif(nproc))/lambda), nrow = 1)
# Join temp row to tarr matrix
tarr <- rbind(tarr, temp)
i = i + 1
}
# I am not sure what was meant by tarr' in the matlab script I took it as inverse of tarr
# which in matlab is tarr.^(-1)??
tarr2 = tarr^(-1)
library(ggplot2)
library(Rfast)
min_for_each_col <- colMins(tarr2, value = TRUE)
qplot(seq_along(min_for_each_col), sort(min_for_each_col), geom="step")
Как вы можете видеть, я отсортировал min_for_each_col
так, чтобы график фактически представлял собой лестничный график, а не какой-то случайный пошаговый график. Я думаю, что есть проблема, так как из кода Matlab 0:size(tarr2, 1)-1
дает количество строк меньше 1, но я не могу понять, почему, если захватить colMins (а есть 40 столбцов), мы бы создали около 20 шагов. Но я могу быть совершенно недоразумением! Также я изменил T
на T0
, поскольку в R T
существует как TRUE
и не подходит для перезаписи!
Надеюсь, это поможет!