问题描述
我尝试了多种方法来检查R对象中的完美正方形,然后替换为0。下面是我尝试过的多行代码;代码必须为一行:
RealSet
解决方法
您可以将数字除以1,然后使用%%
得到余数,然后将值与0进行比较。
sqrt(y)
#[1] 3.00 8.49 7.00 8.37 4.00 1.73 1.73 2.00 9.00 2.45 6.56 2.65 3.46 3.00 1.73
sqrt(y) %% 1 == 0
#[1] TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE
现在将这些值设置为0:
y[sqrt(y) %% 1 == 0] <- 0
#[1] 0 72 0 70 0 3 3 0 0 6 43 7 12 0 3
或者另一种方式:
y * +(sqrt(y) %% 1 != 0)
#[1] 0 72 0 70 0 3 3 0 0 6 43 7 12 0 3
,
我们可以使用round
或ceiling
或as.integer
创建一个条件,将其转换为整数,并且由于涉及的精度,只有完全匹配的条件才返回TRUE。
y[sqrt(y) == round(sqrt(y))] <- 0
y[sqrt(y) == as.integer(sqrt(y))] <- 0
数据
y <- c(9,72,49,70,16,3,4,81,6,43,7,12,9,3)