我想拿一个矢量,例如:
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)
有没有一个光滑的方式来做到这一点?
在R Golf竞赛中提交此问题:
X+(X<0)
Run Code Online (Sandbox Code Playgroud)
可以使用,因为(X <0)将针对任何所需的案例强制执行1而对其他案例执行0.
一个矢量化但稍微冗长的替代方案是:
> 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.
无论向量化是否超过上面涉及的函数调用的数量,我都会留给其他人讨论(我怀疑它对大多数问题有什么不同).