Запускает функцию, которая возвращает строку вместо логического значения?

#r #string #startswith

Вопрос:

Я работал с этой startsWith функцией. Мне было интересно, как я мог заставить его возвращать фактическое имя строки вместо логического значения. Я открыт для использования и других функций.

 startsWith(c("sad_game", "angry_mad", "happy_name"), "happy")
[1] FALSE FALSE  TRUE
 

Спасибо!

Ответ №1:

Вместо startsWith этого используйте grep для возврата значения на лету , ^ чтобы указать начало строки (РЕДАКТИРОВАНИЕ на основе комментариев @Ben Bolker)

 grep("^happy", c("sad_game", "angry_mad", "happy_name"), value = TRUE)
[1] "happy_name"
 

startsWith возвращает логический вектор. Нам нужно взять логический вектор в качестве индекса для подмножества исходного вектора

 c("sad_game", "angry_mad", "happy_name")[startsWith(c("sad_game", 
      "angry_mad", "happy_name"), "happy")]
 

Обратите внимание, что в приведенном выше примере мы должны ввести исходный вектор два раза. Лучшим вариантом было бы создать объект и повторно использовать его

 v1 <- c("sad_game", "angry_mad", "happy_name")
v1[starts_with(v1, "happy")]
 

Комментарии:

1. Классно! Спасибо вам за ваш полезный ответ. Я действительно ценю вашу помощь!

Ответ №2:

Другим вариантом было бы использовать str_subset stringr

 x <- c("sad_game", "angry_mad", "happy_name")
stringr::str_subset(x, '^happy')
#[1] "happy_name"
 

который основан на stringi::stri_subset_regex

 stringi::stri_subset_regex(x, '^happy')