我想知道是否有一种方法可以自定义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)
答案 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