日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Coursera系列-R Programming第三周-词法作用域

發布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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第三周-词法作用域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。