仅添加到矢量中的否定条目

Joe*_*ing 3 r

我想拿一个矢量,例如:

X <-  c(1,2,3,-1,-2,-3)
Run Code Online (Sandbox Code Playgroud)

并将1(或任何其他预先确定的数字)添加到值为负的条目中,以生成

1,2,3,0,-1,-2
Run Code Online (Sandbox Code Playgroud)

有没有一个光滑的方式来做到这一点?

42-*_*42- 8

在R Golf竞赛中提交此问题:

X+(X<0)
Run Code Online (Sandbox Code Playgroud)

可以使用,因为(X <0)将针对任何所需的案例强制执行1而对其他案例执行0.


And*_*rie 7

用途ifelse:

x + ifelse(x<0, 1, 0)
[1]  1  2  3  0 -1 -2
Run Code Online (Sandbox Code Playgroud)


Rei*_*son 7

一个矢量化但稍微冗长的替代方案是:

> X <-  c(1,2,3,-1,-2,-3)
> want <- X < 0
> X[want] <- X[want] + 1
> X
[1]  1  2  3  0 -1 -2
Run Code Online (Sandbox Code Playgroud)

关键步骤是生成X为负(want)的索引.然后我们使用它来索引X并仅为这些添加1.

无论向量化是否超过上面涉及的函数调用的数量,我都会留给其他人讨论(我怀疑它对大多数问题有什么不同).

  • 我通常使用`x [x <0] < - x [x <0] + 1`,只是为了保存代码行,但是相同. (2认同)