R中的矢量化IF语句?

R中的矢量化IF语句?

x <- seq(0.1,10,0.1)
y <- if (x < 5) 1 else 2

我希望if能够对每一个案例进行操作,而不是对整个向量进行操作。我需要改变什么?


jeck猫
浏览 525回答 3
3回答

白板的微信

x <- seq(0.1,10,0.1)> x&nbsp; [1]&nbsp; 0.1&nbsp; 0.2&nbsp; 0.3&nbsp; 0.4&nbsp; 0.5&nbsp; 0.6&nbsp; 0.7&nbsp; 0.8&nbsp; 0.9&nbsp; 1.0&nbsp; 1.1&nbsp; 1.2&nbsp; 1.3&nbsp; 1.4&nbsp; 1.5&nbsp;[16]&nbsp; 1.6&nbsp; 1.7&nbsp; 1.8&nbsp; 1.9&nbsp; 2.0&nbsp; 2.1&nbsp; 2.2&nbsp; 2.3&nbsp; 2.4&nbsp; 2.5&nbsp; 2.6&nbsp; 2.7&nbsp; 2.8&nbsp; 2.9&nbsp; 3.0&nbsp;[31]&nbsp; 3.1&nbsp; 3.2&nbsp; 3.3&nbsp; 3.4&nbsp; 3.5&nbsp; 3.6&nbsp; 3.7&nbsp; 3.8&nbsp; 3.9&nbsp; 4.0&nbsp; 4.1&nbsp; 4.2&nbsp; 4.3&nbsp; 4.4&nbsp; 4.5&nbsp;[46]&nbsp; 4.6&nbsp; 4.7&nbsp; 4.8&nbsp; 4.9&nbsp; 5.0&nbsp; 5.1&nbsp; 5.2&nbsp; 5.3&nbsp; 5.4&nbsp; 5.5&nbsp; 5.6&nbsp; 5.7&nbsp; 5.8&nbsp; 5.9&nbsp; 6.0&nbsp;[61]&nbsp; 6.1&nbsp; 6.2&nbsp; 6.3&nbsp; 6.4&nbsp; 6.5&nbsp; 6.6&nbsp; 6.7&nbsp; 6.8&nbsp; 6.9&nbsp; 7.0&nbsp; 7.1&nbsp; 7.2&nbsp; 7.3&nbsp; 7.4&nbsp; 7.5&nbsp;[76]&nbsp; 7.6&nbsp; 7.7&nbsp; 7.8&nbsp; 7.9&nbsp; 8.0&nbsp; 8.1&nbsp; 8.2&nbsp; 8.3&nbsp; 8.4&nbsp; 8.5&nbsp; 8.6&nbsp; 8.7&nbsp; 8.8&nbsp; 8.9&nbsp; 9.0&nbsp;[91]&nbsp; 9.1&nbsp; 9.2&nbsp; 9.3&nbsp; 9.4&nbsp; 9.5&nbsp; 9.6&nbsp; 9.7&nbsp; 9.8&nbsp; 9.9 10.0> ifelse(x < 5, 1, 2)&nbsp; [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1&nbsp;[38] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2&nbsp;[75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

慕桂英4014372

为了完整性:在大向量中,您可以使用索引来加快速度(我们通常在模拟中执行此操作,其中函数通常运行1000到10000次)。但只要没有必要,只需使用即可ifelse。这读起来容易得多。> set.seed(100)> x <- runif(1000,1,10)> system.time(replicate(10000,{+&nbsp; &nbsp; &nbsp;y <- ifelse(x < 5,1,2)+ }))&nbsp; &nbsp;user&nbsp; system elapsed&nbsp;&nbsp; &nbsp;2.56&nbsp; &nbsp; 0.08&nbsp; &nbsp; 2.64&nbsp;> system.time(replicate(10000,{+&nbsp; &nbsp;y <- rep(2,length(x))+&nbsp; &nbsp;y[x < 5]<- 1+ }))&nbsp; &nbsp;user&nbsp; system elapsed&nbsp;&nbsp; &nbsp;0.48&nbsp; &nbsp; 0.00&nbsp; &nbsp; 0.48&nbsp;

蝴蝶不菲

y <- if (x < 5) 1 else 2不对整个向量进行操作(您收到的警告只会告诉您将使用该条件的第一个元素)。你想要ifelse:y&nbsp;<-&nbsp;ifelse(x&nbsp;<&nbsp;5,&nbsp;1,&nbsp;2)ifelse对整个逻辑向量进行逐元素操作。&nbsp;if只接受一个逻辑值。见?"if"和?ifelse
打开App,查看更多内容
随时随地看视频慕课网APP