1. 程式人生 > >Coursera系列-R Programming第三週-詞法作用域

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賦值為null
        set<-function(y){
                x
<<-y #set(y)後,x=y,m=null m<<-NULL } get <-function() x #把x賦值給get setmean<-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向量賦值給data m<-mean(data, ...) x$setmean(m)快取m m }

以上

另外,本週還講了幾個有用的函式

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課褒貶不一,但是認真聽下來,比自行看書要容易入門。

以及程式設計這種事,必須多寫,多交流,才能獲得好處。

加油!

相關推薦

Coursera系列-R Programming-詞法作用

完成R Programming第三週 這周作業有點繞,更多地是通過一個快取逆矩陣的案例,向我們示範【詞法作用域 Lexical Scopping】的功效。但是作業裡給出的函式有點繞口,花費了我們蠻多心思。 Lexical Scopping: The value of free variables are

Coursera系列-R Programming第二

--- 好久沒發部落格 且容我大吼一句 終於做完這周R Programming的作業了! 之前一直有報coursera的課程,但是總是沒有堅持下去,這次收到他們的郵件推廣,說data science系列課程開通了R語言的中文課程,有中文版論壇,有中文字幕,如此誠意滿滿,再不報名,就實在太落伍了。

Coursera系列-R Programming-Final Week-Assignment3 & 總結

------- 經過週末一個半天的努力,終於把這次的Assignment3做出來,然後做完Quiz4,順利結束R Programming這門課程。 對這門課的綜合吐槽就是,Roger老師的github頭像好帥,動態視訊更帥,視訊內容還算充足,但遠遠不足以應付assignment。Assignment設

Coursera概率圖模型(Probabilistic Graphical Models)程式設計作業分析

Markov Networks for OCR 光學字元識別的馬爾科夫網路   說到光學字元識別(OCR),此前筆者首先想到的會是卷積神經網路,而單詞識別則會考慮使用遞迴神經網路。而本週的作業則基於馬爾科夫網路構建了一個較為基礎OCR系統,目的也主要是讓我們對馬爾科夫網路有個感

Coursera 吳恩達《神經網路與深度學習》程式設計作業

# Package imports import numpy as np import matplotlib.pyplot as plt from testCases import * import sklearn import sklearn.datasets impo

coursera公開課——recommender system作業(

懶蟲鍋~~~!!!! 原始資料: 以及使用者目前對doc的資料 #coding:utf-8 import csv import operator import math csvfile=file("data1.csv",'rU') reader=

[Coursera C++程式設計] 作業

程式設計題#1來源: POJ (Coursera宣告:在POJ上完成的習題將不會計入Coursera的最後成績。)注意: 總時間限制: 1000ms 記憶體限制: 65536kB描述下面程式輸出的結果是:05請填空:12345678910111213#include <

Coursera-機器學習(吳恩達)-程式設計作業

1、邏輯迴歸 邏輯迴歸與線性迴歸的主要區別在於假設函式,邏輯迴歸中的假設函式:                                                                         hθ(x) = g(θ'x)=sgmoid(θ’

Coursera機器學習--邏輯迴歸Logistic Regression

Classification and Representation 1. Classification Linear Regression (線性迴歸)考慮的是連續值([0,1]之間的數)的問題,而Logistic Regression(邏輯迴歸)考

R實戰 篇:數據處理

ase 語言 dex test 矩陣 表達 set mat cond 在實際分析數據之前,必須對數據進行清理和轉化,使數據符合相應的格式,提高數據的質量。數據處理通常包括增加新的變量、處理缺失值、類型轉換、數據排序、數據集的合並和獲取子集等。 一,增加新的變量 通常需要

R實戰 篇:數據處理(基礎)

計算 edi 字符數 定義函數 空間 數值 sqrt 字符類 ceil 數據結構用於存儲數據,不同的數據結構對應不同的操作方法,對應不同的分析目的,應選擇合適的數據結構。在處理數據時,為了便於檢查數據對象,可以通過函數attributes(x)來查看數據對象的屬性,str(

現代軟體工程 部落格作業

作業要求 程式碼地址 how you collaborate: working separately?  pair programming? VS Live Share? other style? 我們採用的是 pair programming的方式,首先是由我完成程式碼的主要框架,完成作業的

2018-09-30工作日報 週報

上午 1.繼續寫“彩虹俱樂部”介面,banner部分大概寫好了,但是還存在一些問題。如果選擇多個img比較麻煩的話,給img標籤加class比較方便。 2.把之前改的幾個單子的提交說明優化了,以後要附上commit的git地址。 3.以後上傳程式碼,不能直接push到1.8.2上

吳恩達 -- 四課 卷積神經網路 Detection algorithms

1.注意輸入圖片的是左上角為(0,0),待檢測目標的尺寸要轉化為在原圖尺寸中的佔比。  2.圖片中沒有需要檢測的三種物體,所以.... 3.需要注意的是,題目中說飲料瓶形狀是圓的並且尺寸都一樣(即尺寸是固定大小,bh=bw=固定值),固定值不需要預測。 &nb

吳恩達 機器學習

轉載https://www.cnblogs.com/LoganGo/p/8562575.html 一.邏輯迴歸問題(分類問題) 生活中存在著許多分類問題,如判斷郵件是否為垃圾郵件;判斷腫瘤是惡性還是良性等。機器學習中邏輯迴歸便是解決分類問題的一種方法。 二分類:通常表示為yϵ{0,1}

實習

這周開始了CRM的真正開發,從整個流程,從需求分析,到表格設計之類的,這周工作上收穫很多。 首先在需求分析上面,我覺得其實作為一個後端程式設計師,也要對這個產品的需求足夠了解,仔細到每個功能點之間的關聯,主要是因為這周在設計表格的時候,經常做到後面就發現又要修改表格,有時候是發現新的關聯,有的時候是欄位屬性

課後程式設計作業

原博地址:https://github.com/AlbertHG/Coursera-Deep-Learning-deeplearning.ai/blob/master/01-Neural%20Networks%20and%20Deep%20Learning/week3/Planar%20data%2

機器學習 | 吳恩達機器學習程式設計作業(Python版)

實驗指導書  下載密碼:fja4 本篇部落格主要講解,吳恩達機器學習第三週的程式設計作業,作業內容主要是利用邏輯迴歸演算法(正則化)進行二分類。實驗的原始版本是用Matlab實現的,本篇部落格主要用Python來實現。   目錄 1.實驗包含的檔案 2.使用邏

機器學習(下)

擬合 1、擬合程度 1.1、過擬合 1.1.1、原因 1.1.2、理論解決方法 1.1.3、實際解決方法之一:正則化 1.1.3.1、正則化線性迴歸 1.1.3.2、正則化正規方

:Excel分析

Excel常用於敏捷,快速,需要短時間相應的場景下是非常便捷的資料處理工具。 相對於語言類例如python和R等則用於常規的,規律的場景中應用,便於形成日常規則統計分析。 對於學習的路徑:Excel函式--->SQL函式------>python 必知必會內容:保證使用版本是2013+;培養