Coursera系列-R Programming第三周-词法作用域
完成R Programming第三周
这周作业有点绕,更多地是通过一个缓存逆矩阵的案例,向我们示范【词法作用域 Lexical Scopping】的功效。但是作业里给出的函数有点绕口,花费了我们蛮多心思。
Lexical Scopping:
The value of free variables are searched for in the environment where the function was defined。
因此
make.power<-function(n){pow<-function(x) {x^n} }
View Code
对于上诉函数,make.power(3)生成的不是一个数值,而是生成了一个新的函数。由此,
cube<-make.power(3) square<-make.power(2)cube(3) ---> 27 square(3) ---->9
make.power(3)生成了一个x^3的函数,而make.power(2)生成了一个x^2的函数。这里的n只会在函数定义的范围里去查找值,不会越过函数再继续查找。内置函数的Parent environment就是定义这个函数本身的函数。
据老师说,这样子的词法作用域,同时适用于python等较新潮的函数。或将成为未来编程界的主流。(compared with dynamic scoping),不过有个问题就是……基于复杂的环境啊等等,这些一般都是作用于物理内存里的,对内存依赖度很高。
在这里有提及,对于这些复杂的绕来绕去的作用域,一个比较简单的方法是:
Is(environment((cube)) >- n, pow (environment内部有两个对象) get("n",environment((cube)) 可以看到n定义为3
以上两个函数可以查看环境调用对象。适于检查。
另外附上本次作业,老师给出的示范例子,以及我个人加的备注项
makeVector<-function(x= numeric()){m<-NULL#把m赋值为nullset<-function(y){x<<-y #set(y)后,x=y,m=nullm<<-NULL}get <-function() x #把x赋值给getsetmean<-function(mean) m<<-mean #这里求均值,只是依然存疑,为什么这里要用function(mean)。。或者在本函数里,不会做mean相关的操作,真正的solve实在cachemean里执行? getmean<-function() m #这里把m复制给getmean(NULL)list(set=set,get=get,setmean=setmean,getmean=getmean) } cachemean<-function(x, ...){m<-x$getmean() #首先把getmean赋值给m,如果m不是NULL的话弹出下列提示if(!is.null(m)){message("getting cached data")return(m)}#出现缓存值data<-x$get()#把最开始的numberic向量赋值给datam<-mean(data, ...) x$setmean(m)缓存mm }
以上
另外,本周还讲了几个有用的函数
lapply (对list)
sapply(lapply的简化版,如果list内均为单个数值,可以输出向量vector,如果等长度,可输出matrix,如果不同长度,输出list)
apply(适用于数组,即都是数的矩阵等,与for相比,字段更少,代码更加简洁,举例如apply(array,Margin,fun),里面margin,1为行row,2为列column
据说rowSums, rowMeans,colSums,colMeans效率更高,没具体试过
mapply(生成list很方便),如下面两行代码,效率一致,适用于把一个fun应用到不同参数里
mapply(rep,1:4,4:1) list(rep(1,4),rep(2,3),rep(3,2),rep(4,1))
tapply(用于对向量的子集做循环,用因子分组)
split(用因子向量对x分组)
library(datasets) data(iris)#探索性分析 names(iris) head(iris) #以下尝试取virginica,speal.Length的方法均错误 iris[,2] iris[iris$Species=="virginica",2] mean(iris[iris$Species=="virginica",2]) ##the above is error,not correct## tapply(test$Sepal.Length,test$Species,mean) #用species.mean对向量进行分组,此法可行,但上述方法为何错误需要再看
library(datasets) data(mtcars)#以下为做某个题时的若干测试。以及试错环节。lapply, tapply,split的用途,以及[[1]]怎么用 #count mpg via cyl d<-tapply(mtcars$mpg,mtcars$cyl,mean) #split out the mtcars, get a list split(mtcars,mtcars$cyl)#get every mtcars mean lapply(mtcars,mean) #error in match fun.(Fun), mtcars$cyl should be numberic or charter sapply(mtcars,mtcars$cyl,mean)##test 4## #the below is uncorrect# #对于tapply出来的向量,可用[[1]]来取值 d[[1]]-d[[3]]library(datasets) head(mtcars) ?mtcars d<-tapply(mtcars$hp,mtcars$cyl,mean) d[[1]]-d[[3]]
以上结束
总体感想,虽然mooc对JHU的coursera课褒贬不一,但是认真听下来,比自行看书要容易入门。
以及编程这种事,必须多写,多交流,才能获得好处。
加油!
转载于:https://www.cnblogs.com/weibaar/p/4175742.html
Coursera系列-R Programming第三周-词法作用域相关推荐
- Coursera系列-R Programming-Final Week-Assignment3 总结
博客总目录,记录学习R与数据分析的一切:http://www.cnblogs.com/weibaar/p/4507801.html ------- 经过周末一个半天的努力,终于把这次的Assignm ...
- 吴恩达deeplearning.ai系列课程笔记+编程作业(15)序列模型(Sequence Models)-第三周 序列模型和注意力机制
第五门课 序列模型(Sequence Models) 第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 文章目录 第五门课 序列模型( ...
- 吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第三周编程作业...
吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第三周所有jupyter notebook文件: 吴恩达,机器学 ...
- 深度学习笔记 第五门课 序列模型 第三周 序列模型和注意力机制
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
- 第三周 序列模型和注意力机制(Sequence models Attention mechanism)
第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 文章目录 **第三周 序列模型和注意力机制(**Sequence models &a ...
- algorithm第三周作业 Collinear Points
cousera 上algorithm part I第三周课程讲述的是排序,包括插入排序.选择排序.希尔排序.归并排序和快速排序.其配套作业为Collinear Points,题目大意为给定若干点,求出 ...
- python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)
[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...
- 【通知】3月第三周直播预告,模型精简前沿技术,人脸分析与编辑,图像风格化...
文/编辑 | 言有三 我们3月份给有三AI秋季划小组备了4场突击直播,了解详细可读. [杂谈]备战3月春招!深入掌握模型优化,人脸算法,图像质量等24个核心领域! 针对每一个方向,本月每周有一次直播( ...
- 20162316刘诚昊 《程序设计与数据结构》 第三周学习总结
20162316刘诚昊 2017-2018-2 <Java程序设计>第三周学习总结 教材学习内容总结 1. 查找是在一组数据中找到指定的目标元素或判定组内不存在目标的过程,常用方法为线性查 ...
最新文章
- Android之四大组件(AIDL Service的使用)
- java 笔记(3)多态 容易理解
- java排序算法总结_排序算法总结及Java实现
- 时序数据处理工具-时间序列数据特征提取TsFresh
- c语言转汇编语言 vs,C语言转换成汇编语言
- PHP随机输出视频API源码,php 32行代码简单实现抖音无水印视频api,附前台页面
- python 取余_玩转Python源码(一) quot;%squot;与“%d”
- Spring : Spring @Transactional-嵌套事物处理
- Mac下IDEA使用优化
- 【网友投稿】大家都在谈裁员,我却默默干倒了3家公司!
- MS Sql中取每个表的大小,行数
- Sublime Text3的插件管理Package Control安装
- python可以写前端吗_哪种ide能同时写java和前端代码?
- 22. 切勿直接修改set或multiset中的键
- 文献阅读 Fully Convolutional Networks for Semantic Segmentation
- 一次非常成功的项目经验分享和糟糕项目的对比
- HTML5内嵌文本编辑器(H5文本编辑器 俗称手机版网站专用)
- 计算机网络(一)图解:计算机网络五层体系结构
- 激光导航技术是如何实现的?
- 【转】Google Page Rank 算法(转载) - 北溟居 - CSDN博客
热门文章
- Discuz验证码识别(编码篇)-写给程序员的TensorFlow教程
- DockerFile和DockerCompose使用总结
- 快手,字节面试题,将IP地址转换成整数类型,再转换回来。C++代码
- matebook14支持触摸屏吗_华为MateBook 14 2021发布,触摸屏成标配
- python 写入excel_实用小工具python数组快速写入excel表格
- ios yymodel 将字典转数组模型_Python3 字典
- 010_jQuery获取和设置内容属性
- 026_JavaScript数组排序
- php如何压缩txt文件怎么打开,PHP-压缩txt文件,同时保持文件扩展名
- 数字身份的一些应用和方案