内容简介:最近在coursera上学习R语言,本博客主要是记录本人的从作业中收获到的一些内容,希望对R语言初学者有帮助。另:因为本人也是初学,博客中难免出现错误,希望各位批评指正。这篇是关于function的一些介绍,有几个平时我没注意到的知识点在这里强调一下。[TOC]
最近在coursera上学习R语言,本博客主要是记录本人的从作业中收获到的一些内容,希望对R语言初学者有帮助。另:因为本人也是初学,博客中难免出现错误,希望各位批评指正。
这篇是关于function的一些介绍,有几个平时我没注意到的知识点在这里强调一下。
[TOC]
1.function的其他一些形式
我们常用的function,都是function(args1, args2, ...)这样的形式,有时候也可以用一下其他的形式:
#这是一般的func函数,就是直接把参数args填在括号里 my_mean <- function(x) { sum(x)/length(x) } #参数多的时候,可以不用这样,比如: add_alpha_and_beta <- function(...) { args <- list() #先将参数设置成一个list alpha <- args[["alpha"]] beta <- args[["beta"]] #指定alpha和beta alpha + beta #函数的功能,就是将这俩加起来 } #还有的时候,可以用一个更简单的形式,就是%...%的形式,大概是酱紫 %add_left_and_right% <- function(left, right) { left + right } #这种形式的函数在使用的时候就会稍有不同 left %add_left_and_rigth% right #我觉着,在指定一些计算左右两边的数据时,这种形式应该也是很好用的
2. 数据的批量读取
以前我读取数据都是read.csv("D:\R\data\data.csv")酱紫的,所以只能读一个,非常不好使,但是在作业中,要求从一个文件夹中读取一堆数据,这个我当时就懵了一下。但是想了想,可以用paste将路径和数据的名字粘在一起,做成一个list就可以了。当然,还有另外一种方法。
directory <- "D:\\R\\data" #这里的路径要填写自己的 files <- paste0(directory, "\\", filenames) #filenames就是要读取的文件名组成的列表 ## 这里要注意一下,paste0是粘贴完是没有空格的,paste是有空格的,如果用paste,需要用sep改一下间隔,如paste("a", "b", sep = "") dat <- data.frame() #建一个空的数据框,一会装数据用 for (i in files) { tempcsv <- read.csv(i) #tempcsv是临时读取的文件 dat <- rbind(dat, tempcsv) return(dat) } #这样所有读取的数据,就都进入dat了
而另一种方法,会更简单一点,就是使用dir()或者list.files()函数;这两种方法是我在知乎上看到的,这里给大家po一下
#用dir()函数 files <- dir(directory) dat <- data.frame() for (i in files) { tempcsv <- read.csv(i) dat <- rbind(dat, tempcsv) return(dat) } #用list.files()函数 files <- list.files(directory) data <- lapply(files, function(file)){ read.csv(paste0(directory, file), stringsAsFactors = FALSE) }) data_cbind <- Reduce(cbind, data) #这个方法是我抄的知乎上的,我自己没试过,也不太看得懂,但是dir()那个函数还是非常好用的。
3.当用function的参数取data.frame中的列时,$并不好用
这个标题可能解释的非常不清楚,我再来实际性的展示一次这个问题,如果没有做这次作业的话,我觉得以后遇到这样的问题可能会很麻烦。
#具体问题是这样子的 pollutantmean <- function(directory, pollutant, id){ wd <- paste("D:\\R\\data\\", directory, sep = "") files <- dir(wd) data <- data.frame() for (i in id) { tempcsv <- read.csv(paste(wd, "\\", files[i], sep = "")) data <- rbind(data, tempcsv) } mean(data[[pollutant]], na.rm = TRUE) }
在这个最后一行,mean(data[[pollutant]], na.rm = TRUR)这里,在取data的一列时,因为列名是函数中的一个参数,所以就不能使用"$"符号,而应该用双方括号[[]]。这个原理我不知道是为什么,但是这样做确实提取出来了。而有时候我同样用双括号又提取不出来,希望有大神能指导一下。
这一次的作业就写了这些东西,今天就到这里。
版权声明:作者保留权利,严禁修改,转载请注明原文链接。
数据人网是数据人学习、交流和分享的平台http://shujuren.org 。专注于从数据中学习到有用知识。 平台的理念:人人投稿,知识共享;人人分析,洞见驱动;智慧聚合,普惠人人。 您在数据人网平台,可以1)学习数据知识;2)创建数据博客;3)认识数据朋友;4)寻找数据工作;5)找到其它与数据相关的干货。 我们努力坚持做原创,聚合和分享优质的省时的数据知识! 我们都是数据人,数据是有价值的,坚定不移地实现从数据到商业价值的转换!
以上所述就是小编给大家介绍的《R语言学习笔记 - 函数的使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 函数 -- 就要学习 Go 语言
- go语言学习(11)--闭包与函数式编程
- C语言学习:main()函数的正确写法
- GO语言学习笔记(五)GO语言函数的简易计算
- Go语言学习笔记-函数的高级使用方法
- Go语言学习笔记03--流程控制循环语句与函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。