Ошибка в репутации: неверный аргумент "times"

Когда я пытаюсь запустить следующий код для 10000 итераций, я получаю следующую ошибку. Ошибка в rep(G1[, 2], G1[, 3]): неверный аргумент 'times'. Поэтому не знаю, как изменить код, чтобы исправить эту ошибку. В основном просто хочу создать временные ряды для производительности генератора, используя уравнение для времени до отказа и времени для ремонта в течение 8736 часов в году, чтобы у меня был временной ряд в часах, когда генератор работает, а когда нет. Условия запуска таковы, что генератор работает в течение первого часа. Наверняка есть более элегантное решение для имитации этого, я просто не могу его найти. Любой комментарий или помощь будут оценены.

MTTF<-2940 # MEDIUM TIME TO FAIL(hours)
MTTR<-60 # MEDIUM TIME TO REPAIR (hours)
TTF<--MTTF*log(runif(100))# equation for Time to fail 
TTR<--MTTR*log(runif(100))# equation for Time to repair
mix<-rep(0,length(TTF)+length(TTR))
sw<-rep(0,length(TTF)+length(TTR))
for(i in 1:length(TTF)){
mix[2*i-1]<-TTF[i]
sw[2*i-1]<-1
mix[2*i]<-TTR[i]
}
cmix<-cumsum(mix)
ccmix<-cbind(cmix[1:which(cmix>8736)],sw[1:which(cmix>8736)])
ccmix[dim(ccmix)[1],1]<-8736


G1<-round(ccmix)
# transform binary values
G1[G1 == 1] <- 12 # is the capacity of the generator

G1 <- cbind(G1, c(G1[1,1], diff(G1[,1])))
a1 <- rep(G1[,2], G1[,3]) ## GENERATING 8736 Values

Таким образом, желаемый результат - 8736 значений 12, когда включено, и 0, когда выключено.


person kelamahim    schedule 18.02.2016    source источник
comment
Возможно, есть лучший подход для создания временных рядов из доступных данных.   -  person kelamahim    schedule 18.02.2016
comment
Я не понимаю, чего вы пытаетесь достичь, можете ли вы создать пример желаемого результата из короткого ввода?   -  person Tensibai    schedule 18.02.2016
comment
1:which(cmix > 8736) ‹- Это странно, так как вернет вектор, а 1:c(1,2,3) будет только 1:1 ... извините, но я не понимаю цель всего этого, и я почти уверен ваша ошибка связана с проблемой XY. Ваш код показывает попытку решить проблему, но сама проблема неясна.   -  person Tensibai    schedule 18.02.2016
comment
Наверняка есть лучший подход для получения почасовых данных от генератора с использованием приведенных выше уравнений. Просто хочу иметь 8736 почасовых значений для генерации, чтобы я знал, что генератор работает в течение 4555 часов, затем не работает в течение 160 часов, затем снова работает и так далее.   -  person kelamahim    schedule 18.02.2016
comment
а затем симулировать это 1000 раз   -  person kelamahim    schedule 18.02.2016
comment
Хорошо, я понял это после того, как снова перечитал ваш вопрос (проблема на самом деле заявлена, но по линии проблемы репутации: p)   -  person Tensibai    schedule 18.02.2016
comment
Возможно, есть лучший способ сделать это, но с ответом Аделы вы можете исправить скрипт, чтобы он работал. Если вы хотите, чтобы кто-то тщательно изучил ваш код (чтобы понять, сможете ли вы написать его более эффективно), посетите наш дочерний веб-сайт Code Review.   -  person slamballais    schedule 18.02.2016


Ответы (1)


Проверьте, что такое G1[,3]. Ошибка может быть вызвана отрицательными значениями аргумента times

person Adela    schedule 18.02.2016
comment
нет отрицательных значений - person kelamahim; 18.02.2016
comment
Что ж, я запускаю ваш код, и появилось еще одно предупреждение. Я бы, вероятно, использовал cmix[which(cmix>8736)] вместо cmix[1:which(cmix>8736)]. Однако есть отрицательное значение в G1[,3] (последнее) - person Adela; 18.02.2016
comment
Может быть, весь мой подход неверен. Код проверю - person kelamahim; 18.02.2016
comment
@Adela: Хорошая работа, мне потребовалось некоторое время, чтобы воспроизвести ее, но проблема довольно проста и действительно вызвана отрицательными значениями. G1[G1==1] <- 12 проверяет все G1 на наличие значений 1. Если первое значение левого столбца равно 1, а второе значение левого столбца меньше 12, то разница будет отрицательной. Один из способов решить эту проблему — G1[,2][G1[,2] == 1] <- 12. - person slamballais; 18.02.2016