假设我创建了以下向量:
x = c(1, 3, 5, 0, 7, 8, 0, 4, 5, 0, 8)
x
我想将非零变为1:
for ( i in 1:length(x) ){
if (x[i]!=0) x[i] = 1}
x
这很好用,但我想知道是否有人可以想到采用这种操作的数学方法,而不是使用if
语句。
答案 0 :(得分:4)
你太复杂了。无需rbind
,请使用c
x = c(1, 3, 5, 0, 7, 8, 0, 4, 5, 0, 8);
x[x!=0]=1;
答案 1 :(得分:3)
官方代码书呆子方式是y <- !!x
: - )
答案 2 :(得分:2)
逻辑上,只需:
as.logical(x) + 0L
#[1] 1 1 1 0 1 1 0 1 1 0 1
答案 3 :(得分:1)
这更具数学性吗?
x = c(1, 3, 5, 0, 7, 8, 0, 4, 5, 0, 8)
ceiling(x/.Machine$integer.max)
[1] 1 1 1 0 1 1 0 1 1 0 1