介绍

一不小心,年都过完了,又要开学了,又可以享受好几个月的鲜活的知识大餐了,大家是不是很开心,很兴奋…嗯…不管怎么说,相别一个寒假的同学之间一定一见面就开始大谈特谈了吧。聊天的时候想必很多男生都会聊起篮球吧~然而,一不小心忘了 NBA 某个球员的号码怎么办呢?不用担心,我们这位同学给大家带来的很好的解决方法——用 R 写的球星编号小程序。

代码

NBAnumbers <- function(x) {
  switch(x,
         "1"=" Tracy McGrady   team: Houston Rockets",
         "2"=" Kyrie Irving   team: Cleveland Cavaliers",
         "3"="Dwyane Wade   team: Miami Heat",
         "5"="Kevin Garnett   team: Boston Celtics",
         "6"="LeBron James    team: Miami Heat ",
         "7"="Carmelo Anthony   team: New York Knicks",
         "11"="Yao Ming    team: Houston Rockets ",
         "12"="Dwight Howard   team: Houston Rockets ",
         "13"="Steve Nash    team: Phoenix Suns",
         "23"="Michal Jordan    team: Chicago Bulls ",
         "24"="Kobe Bryan    team :L . A .Lakers",
         "32"="Shaquile Rashaun O’Neal    team: L . A .Lakers ",
         "91"="Dennis Rodman    team: Chicago Bulls ",
         "33"="Larry Bird    team: Boston Celtics ")
}

演示

NBAnumbers("1")
## [1] " Tracy McGrady   team: Houston Rockets"
NBAnumbers("7")
## [1] "Carmelo Anthony   team: New York Knicks"
NBAnumbers("23")
## [1] "Michal Jordan    team: Chicago Bulls "

点评

这个可是一个比较实用的小程序呀,不过对我这种对篮球没什么感觉的孩子来说,真的是一点都看不懂[捂脸]。从程序上来讲嘛,还是一个很简单的 switch() 函数,输入数字用来配对输出相应的人名和球队。整个程序还是很清晰的,要是能加上一个默认分支,即当用户输入程序中没有的编号时,给一个友好的提示会更好。此外,这里其实存在一个隐藏的小 bug。我们来看这样的一个输入:

NBAnumbers(10)
## [1] "Michal Jordan    team: Chicago Bulls "

这个结果是不是有点出人意料?程序中没有编号为 10 的球员,但是却输出了编号为 23 的乔丹。其实,这并不是 R 给你捣乱,只是因为 switch() 函数在第一个参数为数值类型时,输出的是第这个数加 1 个的参数,我们数一下,乔丹这一行是不是正好是 switch() 函数的第 11 个参数呢。

所以,在使用 switch() 时,最好将用户输入的数进行一下处理,将其转换成文本类型就不会出现不期望的结果啦。

最后,有兴趣的同学们还可以继续扩充程序里的数据,还可以把球队也当成一个搜索条件进行查找哦。