Напишите код, который запрашивает у пользователя его имя и фамилию и если оно совпадает Вашим, выводит на экран “Hello, [name][surname], welcome to R! I missed you”, если не совпадает, то выводит на экран “Sorry, R is not available now”. Подразумевается, что R знает Ваше имя (при желании можете написать функцию, которая вытаскивает Ваше имя пользователя на компьютере и сравнивает с ним).
Примечание: на семинаре мы написали более вредную программу, которая в случае несовпадения имени и фамилии с желаемым, пытается завершить рабочую сессию R через quit()
:
inp <- readline("Enter your name and surname: ")
info <- unlist(strsplit(inp, split = " "))
name <- info[1]
surname <- info[2]
user_name <- "Alla"
user_surname <- "Tambovtseva"
if (name == user_name & surname == user_surname){
print(sprintf("Hello, %s %s. Welcome to R. I missed you.", name, surname))
}else{
quit()
}
Напишите код, который сохраняет число, которое ввел пользователь с клавиатуры (предполагается, что пользователь вводит только числа, причем в правильном формате — в качестве разделителя использует точку), в переменную x
и если x
является целым числом, то выводит на экран сообщение “It is an integer.”, а если x
не является таковым, то выводит “It is not an integer”.
# решение 1
x <- as.numeric(readline("Enter a number: "))
if (x %% 1 == 0){
print("It is an integer.")}else{
print("It is not an integer.")
}
# решение 2
x <- as.numeric(readline("Enter a number: "))
if (as.numeric(x) == as.integer(x)){
print("It is an integer.")}else{
print("It is not an integer.")
}
Напишите код, который запрашивает у пользователя число элементов вектора (“Enter number of elements:”), сохраняет его в переменную n
и создает вектор заданной длины, состоящий из пропущенных значений.
n <- as.numeric(readline("Enter number of elements: "))
vec <- rep(NA, n)
vec
Напишите код, который запрашивает у пользователя число элементов вектора (“Enter number of elements:”), сохраняет его в переменную n
и создает вектор заданной длины, состоящий из пропущенных значений. Дальше, если индекс элемента четный, то этот элемент заменяется на 1, если нечетный - на 0.
n <- as.numeric(readline("Enter number of elements: "))
vec <- rep(NA, n)
for (i in 1:n){
if (i %% 2 == 0){
vec[i] <- 1
}else{
vec[i] <- 0
}
}
vec
Напишите код, который запрашивает у пользователя размерность матрицы (предполагается, что пользователь вводит число строк и столбцов через пробел), сохраняет их и создает единичную матрицу заданной размерности. Если невозможно создать единичную матрицу заданной размерности, на экран выводится сообщение “Impossible to create an identity matrix with such dimensions.”.
Подсказка: единичная матрица - квадратная матрица (число строк равно числу столбцов), на главной диагонали которой стоят 1, а все остальные элементы равны 0. Пример:
[1 0 0]
[0 1 0]
[0 0 1]
dims <- unlist(strsplit(readline("Enter nrow and ncol: "), " "))
nrows <- as.integer(dims[1])
ncols <- as.integer(dims[2])
if (nrows != ncols){
print("Impossible to create an identity matrix with such dimensions.")
}else{
M <- matrix(0, nrows, ncols)
diag(M) <- 1}
M
Напишите функцию, которая принимает на вход числовой вектор и возвращает вектор, состоящий из квадратов элементов вектора, поданного на вход. Можете для определенности назвать функцию get_squares()
.
get_squares <- function(w){
return(w ** 2)
}
get_squares(c(-1, 4, -8, 0))
## [1] 1 16 64 0
Напишите функцию smart_squares()
, которая принимает на вход вектор, и если он числовой, то возвращает вектор из квадратов его элементов, а если нет — возвращает вектор из пропущенных значений и выводит на экран сообщение “Your vector is not numeric.”
smart_squares <- function(w){
if (class(w) != "character"){
res <- w ** 2
}else{
print("Your vector is not numeric.")
res <- rep(NA, length(w))
}
return(res)
}
smart_squares(c(-1, 6, 7))
## [1] 1 36 49
smart_squares(c("a", "b"))
## [1] "Your vector is not numeric."
## [1] NA NA