Быстрый способ проверить, являются ли элементы в списке числами (но как.character())

#r #if-statement

Вопрос:

У меня есть список list_A , который я хочу просмотреть в forloop. Однако я хочу перебирать только те элементы, которые являются числами. Пример ниже:

 #generate exmaple: 
list_A <- list("A","B","C","8","1","5","3","U","2","C","6")
names(list_A) <- c("A","B","C","8","1","5","3","U","2","C","6")

# my attempt
for (i in names(list_A)) {
  if (i == ??) {
  print("is a number")
  }
}
 

Ответ №1:

Мы можем использовать

  sapply(list_A, function(x) is.na(as.numeric(x)))
 

или с grep

 sapply(list_A, function(x) !grepl('\D', x))
  A     B     C     8     1     5     3     U     2     C     6 
FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE 
 

Или если length это всего 1 за list элемент, unlist и применить grepl или as.numeric сразу

 !grepl('\D', unlist(list_A))
 [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
 

Или в for петле

 for(l in list_A) {
     if(!grepl('\D', l)) print(paste(l, ' is a number'))
}
[1] "8  is a number"
[1] "1  is a number"
[1] "5  is a number"
[1] "3  is a number"
[1] "2  is a number"
[1] "6  is a number"