我具有以下采样功能:
z = rnorm(n, 0.3, 1)
,并希望我的变量f
等于1
,如果-pi < z_i < pi
等于0
。
我不确定如何实现这一目标。我的另一个想法是使用reject
函数,但这似乎过于复杂。
谢谢!
答案 0 :(得分:0)
您可以在此处使用函数ifelse
,该函数可以完全满足您的要求:如果满足条件,则返回一个值,否则返回另一个值。例如,对于n = 10和pi = 1:
f = ifelse (rnorm(n=10, 0.3, 1) > 1,1,0)
通过此示例,您应该轻松弄清楚如何解决您的问题。
您还可以将结果保存在时间向量中,然后使用布尔运算符检查所需的确切条件:
ri = rnorm(n=10, 0.3, 1)
ifelse(-1 < ri & ri < 1,1,0)
在@ M-M注释之后,您还可以仅从评估的条件表达式中获取值1或0。例如:
as.integer(-1 < ri & ri < 1)
答案 1 :(得分:0)
假设您已创建变量z
,则可以使用ifelse()
进行此操作:
f <- ifelse(abs(z) < pi, 1, 0)
或使用:
f <- as.integer(abs(z) < pi)
第二个可能更快,尽管除非n
很大,否则您可能不会注意到。
编辑:第二个方法要快得多:只需在1,000,000个值的向量上进行检查,第一个方法需要0.2秒,第二个方法显示elapsed 0
!