我正在寻找一种根据某种可能性在R中实现特殊波形(正弦/余弦)的简单方法。例如,如何对以下函数建模:
A= runif(500,1,3)
phi=rnorm(500, 0, 1)
C= runif(500,0,1)
Nt= rnorm(500,0,0.05)
t= seq(1,50,length=500)
xt1= A*cos(t+phi)+C+Nt
xt2= A*sin(t+phi)+C+Nt
我将创建一个时间序列xt,它需要一个瞬时$ t $,其概率为0.5的余弦或概率为0.5的正弦
答案 0 :(得分:1)
我认为使用if / else的向量化版本可以充分解决此问题:
ifelse(runif(length(t)) < 0.5, xt1, xt2)
注意:这在大多数情况下都非常有效。但是,ifelse
可能会有副作用。正常工作,保留POSIXt
类:
Sys.time() + ifelse(runif(3) < 0.5, 0, 100)
# [1] "2018-10-29 12:54:08 PDT" "2018-10-29 12:54:08 PDT" "2018-10-29 12:54:08 PDT"
但是,如果您正在处理已经分类的向量,则该类可能会丢失:
ifelse(runif(3) < 0.5, Sys.time(), Sys.time() + 100)
# [1] 1540842742 1540842842 1540842842
有一些解决方法,但有时将它们更好地归类为“黑客”。如果您没有意识到需要寻找它们,则不能使用它们。 (如果向量只是numeric
,integer
,logical
或character
,通常这不是一个因素,而且我敢肯定其他一些向量同样“好”。 )