已知 \[攝氏 = \frac{5}{9} \times (華氏 - 32)\]
請撰寫一個「攝氏轉華氏」的函數 c2f()
,使其能接受一個「攝氏溫標」的輸入,並輸出此溫度的「華氏溫標」。
<- function(celsius) {
c2f = celsius*9/5+32
fahrenheit return(fahrenheit)
}
# 請勿更動此行之下的程式碼
c2f(100)
c2f(0)
c2f(37.5)
# should print out:
#> [1] 212
#> [1] 32
#> [1] 99.5
#> [1] 212
#> [1] 32
#> [1] 99.5
<- function(p1, p2, p3) {
concat3 return(paste(p1, p2, p3))
}
上方的函數 concat3()
能將使用者輸入的 3 個值串在一起輸出成字串,例如:
concat3(p1 = 3, p2 = 2, p3 = 1)
#> [1] "3 2 1"
請修改下方程式碼,使 concat3()
可以印出 "3 1 2"
。除此之外,請遵守下方的兩個限制:
請勿更動 Argument 的順序 (i.e., 第一個 Argument 是 1
, 第二個是 3
, 第三個是 2
)
只能給予其中一個 Argument 名稱,例如:
# 不可給予兩個以上的 Argument 名稱,如:
concat3(p1 = 1, p2 = 3, p3 = 2)
concat3(p1 = 1, p2 = 3, 2)
# 合法的寫法:
concat3(1, 3, p1 = 2)
concat3(1, p3 = 3, 2)
# Modify the code below
concat3(1, p1 = 3, 2)
# should print out:
#> [1] "3 1 2"
#> [1] "3 1 2"
<- c(1, 5, 4, 1, 4, 5, 1, 3, 2, 4, 5, 5, 3, 4, 2, 1, 5, 4, 2, 2, 1, 4, 3, 5, 2, 4, 1, 3, 3, 4, 3, 2, 1, 2, 2) students
上方的 students
儲存著 35 筆學生的年級 (1 至 5 年級) 資料。 請計算出高年級 (4 & 5 年級) 學生的人數與比例:
# 高年級人數 (10 分)
# Write your code here
<- (students == 4)+(students == 5)
seniors sum(seniors)
# Should print out
#> [1] 14
#> [1] 14
# 高年級比例 (10 分)
# Write your code here
mean(seniors)
# Should print out
#> [1] 0.4
#> [1] 0.4
承上題,請修改 students
內的元素,將年級改以英文 (Freshman, Sophomore, Junior, Senior) 表達:
# Hint: 注意資料類型與 Coercion (可能會用到 as.character())
# Write your code here
for (i in 1:5) {
<- c("Freshman", "Sophomore", "Junior", "Senior","Senior")
grades == i]<- grades[i]
students[students
}
# DO NOT modify the code below
students# should print out:
#> [1] "Freshman" "Senior" "Senior" "Freshman" "Senior" "Senior"
#> [7] "Freshman" "Junior" "Sophomore" "Senior" "Senior" "Senior"
#> [13] "Junior" "Senior" "Sophomore" "Freshman" "Senior" "Senior"
#> [19] "Sophomore" "Sophomore" "Freshman" "Senior" "Junior" "Senior"
#> [25] "Sophomore" "Senior" "Freshman" "Junior" "Junior" "Senior"
#> [31] "Junior" "Sophomore" "Freshman" "Sophomore" "Sophomore"
#> [1] "Freshman" "Senior" "Senior" "Freshman" "Senior" "Senior"
#> [7] "Freshman" "Junior" "Sophomore" "Senior" "Senior" "Senior"
#> [13] "Junior" "Senior" "Sophomore" "Freshman" "Senior" "Senior"
#> [19] "Sophomore" "Sophomore" "Freshman" "Senior" "Junior" "Senior"
#> [25] "Sophomore" "Senior" "Freshman" "Junior" "Junior" "Senior"
#> [31] "Junior" "Sophomore" "Freshman" "Sophomore" "Sophomore"
# DO NOT Modify the code here
<- c(2, 2, 3, 1, 4, 3, 1, 4, 1, 3, 1, 2, 1, 4, 3, 1, 4, 4, 1, 3) students2
此題與前面的 Vector I 一樣會用到學生的年級資料。與前面不同的是,students2
裡的年級只有 1 至 4 年級。
在這題,同學需要撰寫一個函數 grade_precentage()
,用來計算 students2
裡面各年級的比例。這個函數有兩個參數:
grades
: 學生的年級。可以傳入一個或多個值,例如 2
, c(1, 2)
或 c("Freshman", "Junior")
。函數會回傳 grades
裡的年級所佔的學生比例。students
: 學生年級資料這個函數特別的地方在於它能容許不同資料類型的輸入:不管使用者在 grades
裡輸入的是數值 (1 至 4) 或是英文 (Freshman, Sophomore, Junior, Senior),它都能算出正確的年級比例資訊。
(Hint: 這題可能會用到 is.character()
與 as.character()
。 他們的功能分別是確認資料類型是否為字串以及將其它資料類型轉換成字串。詳見說明文件)
<- function(grades, students) {
grade_percentage # Modify the code below
<- c("Freshman", "Sophomore", "Junior", "Senior")
b if (is.numeric(grades) && length(grades) == 1) {
<- students == grades
s else if (is.numeric(grades) && length(grades) > 1){
} <- students %in% grades
s else {
} for (i in 1:4) {
== i] <- b[i]
students[students
} if (length(grades) == 1) {
<- students == grades
s else {
} <- students %in% grades
s
}
}<- mean(s)
precentage return(precentage)
}# DO NOT modify the code below
grade_percentage(grades = 3, students = students2)
grade_percentage(grades = "Junior", students = students2)
grade_percentage(grades = c(3, 4), students = students2)
grade_percentage(grades = c("Junior", "Senior"), students = students2)
# Should print out
#> [1] 0.25
#> [1] 0.25
#> [1] 0.5
#> [1] 0.5
#> [1] 0.25
#> [1] 0.25
#> [1] 0.5
#> [1] 0.5
我們假設一組有效的密碼必須符合以下條件:
請同學針對以上條件,撰寫一個函數 check_password()
,判斷傳入的字串是否為有效密碼。如果是有效密碼,請回傳 Valid Password
;如果是無效密碼,請回傳 INVALID
。除此之外,請遵守下方的限制:
grepl()
或 Base R 以外的套件)提示:
strsplit()
來將輸入的密碼拆成一個個字元,例如,將 "abc123"
變成 "a" "b" "c" "1" "2" "3"
。注意:strsplit()
所回傳的資料結構是尚未教過的 list
。%in%
以及布林運算子 any()
<- function(pw){
check_password # Write your code here
<- c(0:9)
numbers <- unlist(strsplit(pw, split = ""))
pw if (any(pw %in% letters)){
if (any(pw %in% LETTERS)) {
if (any(pw %in% numbers)) {
if (length(pw) > 5) {
if (all(pw != " ")) {
<- "Valid Password"
ans else {
} <- "INVALID"
ans
}else {
} <- "INVALID"
ans
}else {
} <- "INVALID"
ans
}else {
} <- "INVALID"
ans
}else {
} <- "INVALID"
ans
}
return(ans)
}# DO NOT modify the code below
check_password("rLads2019")
check_password("rlads2019")
check_password("RLADS2019")
check_password("rLadsrLads")
check_password("rLads 2019")
check_password("rLad2")
# Should print out
#> [1] "Valid Password"
#> [1] "INVALID"
#> [1] "INVALID"
#> [1] "INVALID"
#> [1] "INVALID"
#> [1] "INVALID"
#> [1] "Valid Password"
#> [1] "INVALID"
#> [1] "INVALID"
#> [1] "INVALID"
#> [1] "INVALID"
#> [1] "INVALID"