R语言学习笔记 - 函数的使用

栏目: R语言 · 发布时间: 6年前

内容简介:最近在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语言学习笔记 - 函数的使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

SEO实战密码

SEO实战密码

昝辉 / 电子工业出版社 / 2012-5-1 / 89.00元

SEO实战密码:60天网站流量提高20倍(第2版),ISBN:9787121167676,作者:昝辉Zac 著一起来看看 《SEO实战密码》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码