在rep函数中出现错误:无效的“times”参数。

12
当我尝试运行以下代码进行10000次迭代时,会出现以下错误: Error in rep(G1[, 2], G1[, 3]) : invalid 'times' argument。所以不知道如何更改代码来修复该错误。基本上,只想使用发生故障时间和修复时间的方程,在一年中的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的状态为ON时,值为0的状态为OFF


也许有更好的方法从可用数据生成时间序列。 - kelamahim
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Tensibai
肯定有更好的方法使用上述方程从发电机生成小时数据。只想在发电过程中获得8736个小时值,以便我知道发电机运行了4555小时,然后停止了160小时,然后再次运行等等... - kelamahim
好的,我再重新阅读了一遍你的问题后明白了(实际上问题已经被提出,只是在回复问题的过程中被忽略了 :p)。 - Tensibai
1
可能有更好的方法来解决这个问题,但是通过Adela的答案,你可以修复脚本使其正常工作。如果你想让别人仔细查看你的代码(以查看是否可以更有效地编写它),请尝试我们的姊妹网站Code Review - slamballais
显示剩余2条评论
1个回答

13

检查G1[,3]是什么。错误可能由于times参数中存在负值引起。


1
没有负数值。 - kelamahim
好的,我运行了您的代码,又出现了一个警告。我可能会使用 cmix[which(cmix>8736)] 而不是 cmix[1:which(cmix>8736)]。但是 G1[,3](最后一个值)中有负值。 - Adela
1
也许我的整个方法都是错误的。将会检查代码。 - kelamahim
2
@Adela:干得好,我花了一些时间才复制它,但问题非常简单,确实是由负值引起的。G1[G1==1] <- 12 检查所有 G1 的值是否为 1。如果左列的第一个值为 1,而左列的第二个值低于 12,则会产生负差。解决这个问题的方法之一是 G1[,2][G1[,2] == 1] <- 12 - slamballais

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接