Подтвердить что ты не робот

Как вставить строку для каждого элемента вектора строк, применяя в R?

У меня есть вектор строк.

d <- c("Mon","Tues","Wednes","Thurs","Fri","Satur","Sun")

для которого я хочу вставить строку "день" на каждый элемент вектора способом, подобным этому.

week <- apply(d, "day", paste, sep='')
4b9b3361

Ответ 1

Нет необходимости в apply(), просто используйте paste():

R> d <- c("Mon","Tues","Wednes","Thurs","Fri","Satur","Sun")
R> week <- paste(d, "day", sep="")
R> week
[1] "Monday"    "Tuesday"   "Wednesday" "Thursday"  
[4] "Friday"    "Saturday"  "Sunday"   
R> 

Ответ 2

Другое уже указывало, что, поскольку paste векторизован, нет необходимости использовать apply в этом случае.

Однако, чтобы ответить на ваш вопрос: apply используется для массива или data.frame. Если вы хотите применить функцию по списку (или вектору), используйте lapply или sapply (вариант lapply, который упрощает результаты):

sapply(d, paste, "day", sep="")
        Mon        Tues      Wednes       Thurs         Fri       Satur 
   "Monday"   "Tuesday" "Wednesday"  "Thursday"    "Friday"  "Saturday" 
        Sun 
   "Sunday" 

Ответ 3

Помимо paste/paste0 есть множество способов, которыми мы можем добавить строку к каждому элементу в векторе.

1) Использование sprintf

sprintf("%sday", d)
#[1] "Monday"    "Tuesday" "Wednesday" "Thursday"  "Friday"  "Saturday"  "Sunday" 

2) glue

glue::glue("{d}days")

Здесь {d} оценивается как R-код. При необходимости это можно обернуть в as.character.

3) str_c в stringr

stringr::str_c(d, "day")

чей эквивалент

4) stri_c в stringi

stringi::stri_c(d, "day")

5) stringi также имеет stri_paste

stringi::stri_paste(d, "day")