用户工具

《R语言基础》与《R语言与数据分析》课程常见问题

一般问题

医学生学R语言有什么用?或者会用在哪些地方?为什么要学习R语言?……

  • 当发现有R语言这个东西,自己一点都不了解,又有老师推荐的时候,本能地去学习一下应是很自然的,本应无关是否有用;
  • 编程教育是通识教育,不需要问有用没用,只看是否有足够的认知和条件。学编程是一种思维锻炼,提升对这个时代的理解;
  • “R is a free software environment for statistical computing and graphics.”,R为统计和数据可视化而生,有很多运行在R环境的软件包处理各种各样的数据,在涉及到数据处理、作图方面的工作中都可能可以用到,比如简单的表格合并、批量表格填充;
  • 至于具体有什么用,要看将来从事什么职业。在一些工作场景,或许连电脑都可以不用,更加用不到R语言;如果将来读研究生,那么R是科研的利器,t检验、标准曲线、生存分析,都可以用到R。……。至于高通量测序、各种组学,都有很多软件包是基于R语言的;
  • 生活中也可以用到,比如顺手写几行代码可以做个随机数的加减带小学一年级的孩子进行口算;
  • 王老师当教秘时,许多工作因R而高效,看看王老师排课组手、节次转时间小工具

R和Python应该先学哪一个?Python相比,R语言更适合医学生吗?……

  • 你正在问这个问题,那么毫无疑问你应该先学R,因为R会更容易被用于你的日常工作和生活;
  • 你目前并没有必须要用到Python的场景;
  • 学了R之后再学Python会比较容易;
  • 在我的工作中,都是混合用的,不同的场景不同的语言顺手程度不同,自然选择更顺手的用

我数学不好,可以学习R语言么?

首先,肯定是可以的。 数学好的学R语言大概率会更容易,这是因为人家学什么都容易才把数学学得好。那如果我们自己数学没学好,那么大概率学编程也要慢一些,但这并不代表着我们就学不会。 或许正因为数学没有学得很好,才更有必要学习R语言。有的问题,数学好的可以在更高层次来解决问题,而数学不好的可以通过编程机械地通过循环、迭代来解决。比如这样一个问题:

例题:100个人排好序,然后把奇数位的人淘汰,剩下的还按照原来的次序重新排序,再把奇数位的淘汰,如此反复,直到剩下一个人。问,为了不被淘汰,一开始应该站在第几位?

这个问题,数学好的很快就会发现,应该选100以内2的n次方里最大的。而对于数学不好的,用编程,也能很快解决,比如:

evenLast <- function(N=100){
  X <- 1:N
  while(length(X) > 1)  X <- X[seq(2, length(X), 2)]
  return(X)
}
 
evenLast(100)
##  [1] 64
evenLast(127)
##  [1] 64
evenLast(128)
##  [1] 128
evenLast(150)
##  [1] 128
evenLast(259)
##  [1] 256

课程问题

王老师课上学习base-R而不是Tidyverse,为什么?

  • 从base-R开始学习R语言更合适。初学R要学习一些基础知识和技能,而不是仅仅学习几个包的几个函数怎么使用。从Tidyverse开始学或许会在一开始能够更快地学会用Tidyverse序列包的几个函数进行一些数据的操作,但仅仅学习那些函数是远远不够的,我们还要学会怎么去编写满足自己要求的函数。
  • Tidyverse序列的R包只是R包中的一小部分,不是R的全部。Tidyverse本身也是基于base-R的,但Tidyverse风格与base-R的风格差异很大,这种风格不见得就是一个明智的选择。大家常用的ggplot2和stringr并不是Tidyverse的风格,但被Tidyverse团队纳入Tidyverse序列。还有大量的别的R包,比如CRAN的大量不同任务的R包(生存分析、机器学习、时间序列、等等、等等),又比如生物学数据分析方面有Bioconductor序列,这些许多(如果不是所有的)都是base-R风格。对于医学生来说,主要在医学和生物学方面运用R,还是学习base-R更合适。
  • base-R并不难学,相反Tidyverse把一些问题弄复杂了。少数几个base-R的函数就能解决的问题,在Tidyverse可能需要用到更多的函数,要记住那么多的函数并不是一件更简单的事情。
  • 学了base-R之后再去用Tidyverse能很快上手,Tidyverse序列归根结底也是R包,仅仅就是代码风格有点不同而已。这就像是“授人以渔”和“授人以鱼”的区别,我们的课程希望能够“授人以渔”。
  • UC Davis的Norm Matloff教授在TidyverseSkeptic一文中对这个问题有更加详尽的论述,感兴趣的可以阅读之。

王老师课上建议不要用RStudio,为什么?

  • RStudio增加了初学者学R语言的难度。根据以往的教学经验,很多同学以为RStudio就是R,困扰在RStudio里。RStudio不过就是在R外边套了个壳,把一些R的功能做了图形界面,这对初学者是可有可无的,却给初学者带来了更多纷扰。RStudio是一种IDE,也就是Integrated Development Environment,意思是“集成开发环境”,而不是集成学习环境,对于初学者,离开发还很遥远,没有必要在一开始学R的同时再学一个IDE而增加负担。先学通R,再去学用IDE没有任何难度,当然更有可能是到时候会发现自己根本没有必要用RStudio这样的IDE。
  • 对于运行代码,R自带的控制台(R Console)(Rgui)足够了。Rgui比RStudio更简洁,对于新手来说,使用Rgui更能专注于学习,无需去应对RStudio造成的问题。Console|Terminal|Background Jobs子窗(panel)的Console栏相当于的Rgui,Terminal栏也就是Windows的CMD,还不如CygWin好用,Background Jobs的功能初学者用不到,我要运行一个后台任务也不会去通过这个图形界面实现,而是在终端命令后边加个&就可以放到后台。
  • 对于编辑代码,Notepad++这样的纯文本编辑器要好用得多,RStudio的Source子窗太过简单了。在Notepad++里编辑代码可以通过NppToR推送到Rgui的控制台里边运行,也非常方便。另外,Natepad++里编辑的代码还能通过NppToR推送到Putty,这样远程使用服务器就很方便。
  • 简单代码就能实现RStudio的一些图形界面功能。RStudio的Environment|History|Connections|Tutorial子窗和Files|Plots|Packages|Help|Viewer|Presentation子窗的功能基本可以用简单的命令实现。比如Environment展示的全局环境中的对象,直接ls()命令就显示了。而History直接用history()命令就能查看。而RStudio的Plots栏则把作图的展示局限在一个角落,并不方便。其余的就懒得一一点评了。这些功能本来也无关紧要,就是可有可无的,并不值得那么推崇。这些栏目看起来好像很厉害,但实际上用得很少,有的简单代码就能实现,无需去点鼠标。而且我们编程更多希望用代码记录下所有的操作,通过点鼠标来实现的过程是很不好记录、不方便交流的。
  • Rgui与Notepad++和NppToR组合更高效且方便,可以把R控制台、R图形窗口、Notepad++自由地放在任何位置,这样使用多个屏幕的时候可以根据自己的喜好放在不同的屏幕或者屏幕不同的位置,从而达到最佳的使用体验。

本网页已被访问6326次。


页面工具

Powered by DokuWiki | ©2018-8102 Hong Wang | 桂ICP备18010616号 | 桂公网安备 45010302002017号