仅舍入数字输入,否则在R

时间:2019-04-23 04:30:04

标签: r function rounding

我想知道是否有一种方法可以自定义R中的round,以便如果一个输入非数字(例如"No"),则round只会输出非数字,但仅舍入其他数字输入?

这是我尝试没有成功的事情:

a = c(.56789, "No", .87542) ## round numerics but just output the non-numeric

roundif <- function(x, digits) if(any(!is.numeric(x))) x else round(x, digits)

roundif(a, 2)

1 个答案:

答案 0 :(得分:1)

我们可以使用grepl创建用于子集数字元素的逻辑索引。在函数grepl中,将检查元素中是否有字母([A-Za-z])。可以进一步推广为包含其他字符(如果需要)

roundif <- function(x, digits) {
          i1 <- grepl('[A-Za-z]', x) # logical index
           x1 <- as.list(x) # convert to a list
           x1[!i1] <- round(as.numeric(a[!i1]), digits) # assign rounded values 
           x1

   }

roundif(a, 2)
#[[1]]
#[1] 0.57

#[[2]]
#[1] "No"

#[[3]]
#[1] 0.88

注意:vector只能转换为一个list,因此vector会转换为type