【发布时间】:2013-12-26 21:41:24
【问题描述】:
我想从另一个变量 Y 创建一个变量 X,如果 Y 为负则取 1,如果 Y 为正则取 0。我做了ifelse(Y[Y<0],1,0),但它只在 Y[Y=0 时不显示 0。
【问题讨论】:
-
只要
ifelse(Y < 0, 1, 0)。
标签: r if-statement vector boolean conditional
我想从另一个变量 Y 创建一个变量 X,如果 Y 为负则取 1,如果 Y 为正则取 0。我做了ifelse(Y[Y<0],1,0),但它只在 Y[Y=0 时不显示 0。
【问题讨论】:
ifelse(Y < 0, 1, 0)。
标签: r if-statement vector boolean conditional
在斯蒂芬的回答中添加贾斯汀的评论:
Rgames> library(microbenchmark)
Rgames> negone <-function(x) ifelse(x<0,1,0)
Rgames> negtwo <-function(x) as.integer(x<0)
Rgames> longfoo <- -1e6:1e6
Rgames> microbenchmark(negone(longfoo),negtwo(longfoo),times=10)
Unit: milliseconds
expr min lq median uq max neval
negone(longfoo) 602.49903 607.36539 616.70490 662.40269 819.8965 10
negtwo(longfoo) 17.06902 17.55908 20.99846 24.52379 26.0333 10
【讨论】:
这是一个测试序列:
> Y=seq(-5,5,1)
> Y
[1] -5 -4 -3 -2 -1 0 1 2 3 4 5
这是您在 ifelse 语句中的测试。
> Y[Y<0]
[1] -5 -4 -3 -2 -1
其实意义不大,
这可能是你的意思:
> ifelse(Y<0,1,0)
[1] 1 1 1 1 1 0 0 0 0 0 0
【讨论】:
as.integer(Y < 0) 将给出相同的答案,并且开销更少。