Соз. функц которая по параметру N возвращает наименование дня недели .В качестве параметра N передавать вектор с набором значений произв-ой длины на R

Создать функцию, которая по переданному параметру N возвращает наименование дня недели на русском языке.В качестве параметра N передавать вектор с набором значений произвольной длины.

days_of_the_weeks<-function(N){
english<-c('Monday','Tuesday','Wednesday', 'Thursday','Friday', 'Saturday', 'Sunday')
l<-c(:)
for (english in l) {
z<-english[c(x=l)]
}
return (z)
}
print(days_of_the_weeks( c(3,5,7,8,2)))  

Ответы (1 шт):

Автор решения: aleksandr barakin

вот вы создали вектор:

english<-c('Monday','Tuesday','Wednesday', 'Thursday','Friday', 'Saturday', 'Sunday')

к элементам вектора можно обратиться по их индексу:

english[1]
#> [1] "Monday"

но и индекс тоже может быть не скалярным значением, а вектором:

english[c(3,5,2)]
#> [1] "Wednesday" "Friday"    "Tuesday"

или, без дополнительных промежуточных переменных:

c('Monday','Tuesday','Wednesday', 'Thursday','Friday', 'Saturday', 'Sunday')[c(3,5,2)]
#> [1] "Wednesday" "Friday"    "Tuesday"

получили уже практически функцию. осталось добавить синтаксическую обёртку:

функция <- function(вектор) c('Monday','Tuesday','Wednesday', 'Thursday','Friday', 'Saturday', 'Sunday')[вектор]

проверяем:

функция(c(3,5,2))
#> [1] "Wednesday" "Friday"    "Tuesday"
функция(7)
#> [1] "Sunday"

но нет предела совершенству! а как быть с числами, большими семи? первое, что приходит в голову — взять остаток (оператор %%) от деления на семь. но ведь остаток от деления, например 7 на 7 — это будет 0, а не 7, как нам хотелось бы. а можно провернуть такой математический финт: сначала уменьшить число на единицу, получить остаток от деления на семь, а потом вновь добавить единицу. главное — в языке r все эти манипуляции работают одинаково хорошо как со скалярными величинами, так и с векторами («под капотом» скалярное значение — это просто вектор единичной длины):

функция2 <- function(вектор) c('Monday','Tuesday','Wednesday', 'Thursday','Friday', 'Saturday', 'Sunday')[(вектор-1)%%7+1]

проверяем. отлично работает даже и с отрицательными значениями:

функция2(-10:10)
#>  [1] "Thursday"  "Friday"    "Saturday"  "Sunday"    "Monday"    "Tuesday"  
#>  [7] "Wednesday" "Thursday"  "Friday"    "Saturday"  "Sunday"    "Monday"   
#> [13] "Tuesday"   "Wednesday" "Thursday"  "Friday"    "Saturday"  "Sunday"   
#> [19] "Monday"    "Tuesday"   "Wednesday"

Created on 2021-04-06 by the reprex package (v0.2.1)

→ Ссылка