轨道
/
R
R
/
练习
/
千层面
千层面

千层面

学习练习

简介

变量与赋值

R 是一门动态类型语言,因此通常不需要指定变量的类型。首选的赋值运算符是<-。

x <- 42
avogadro <- 6.02e23
mystr <- "Hello, World!"

用=代替<-通常也能用,但并非总是如此,而且这种写法风格不佳,不推荐使用。 如果在 RStudio 中工作,可以用快捷键Alt-minus输入。

运算符大多是常规的,但请注意%/%和%%:

2 + 3   # 5
2 - 3   # -1
2 * 3   # 6
2 / 3   # 0.6666667
8 %/% 3 # 2 (integer division)
8 %% 3  # 2 (remainder)
2 ^ 3   # 8 (exponential)

在 R 中,#开始一段单行注释。 多行注释没有单独的语法。

函数

定义函数的写法如下:

squareit <- function(x) {
    x * x
}

函数可以有零个或多个实参,用逗号分隔。 即使没有形参,function()后面也必须带上括号()。

可以为函数的实参指定默认值,不过这些带默认值的实参必须放在所有没有默认值的实参之后,并且要用=而不是<-来指定默认值。 下面是一个相当没有意义的例子:

squareit <- function(x = 42) {
    x * x
}

squareit()
#> [1] 1764

对于单行函数体,大括号{ }并非严格必需,但加上它们被认为是一种良好的风格。

如上面的例子所示,R 会自动返回函数的最后一个值。

return()可以用在函数体中的任何位置,让返回值变得明确。

调用函数的方式和许多其他语言相同:

squareit(3)
#> [1] 9

说明

在这个练习中,你要写一些代码,帮你照着最喜欢的菜谱做出一份美味的千层面。

一共有四个任务,都与烹饪千层面所花的时间有关。

1. 定义千层面在烤箱中的预期时间(分钟)

定义函数expected_minutes_in_oven(),它不接受任何形参,返回千层面应该在烤箱里待多少分钟。按照菜谱,预期的烤箱时间是 60 分钟。

> expected_minutes_in_oven()
[1] 60

2. 计算剩余的烤箱时间(分钟)

定义函数remaining_time_in_minutes,它把千层面实际已经在烤箱里待的分钟数作为形参,并根据上一个任务中得出的预期烤箱时间,返回千层面还需要在烤箱里继续待多少分钟。

> remaining_time_in_minutes(50)
[1] 10

3. 计算准备时间(分钟)

定义函数prep_time_in_minutes(),它把你在千层面里加的层数作为形参,返回你准备千层面花了多少分钟,假设每一层需要 2 分钟来准备。

> prep_time_in_minutes(2)
[1] 4

4. 计算已用时间(分钟)

定义函数elapsed_time_in_minutes,它接收两个实参:第一个实参是你在千层面里加的层数,第二个形参是千层面已经在烤箱里待的分钟数。这个函数应该返回你烹饪千层面总共花了多少分钟,也就是准备时间(分钟)与千层面此刻已经在烤箱里所花时间的总和。

> elapsed_time_in_minutes(3, 20)
[1] 26
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
R Exercism

准备好开始 千层面 了吗?

注册 Exercism,借助 21 个概念111 个练习 和真人导师指导,学习并掌握 R,全部免费。