только круглый ввод, который является числовым, иначе пропустить в R - PullRequest
1 голос
/ 23 апреля 2019

Мне было интересно, есть ли способ настроить round в R таким образом, чтобы при вводе нецифровых чисел (например, "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 Ответ

1 голос
/ 23 апреля 2019

Мы можем использовать 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

.
...