天天看點

《資料科學:R語言實作》——1.5 使用詞法域

本節書摘來自華章出版社《資料科學:r語言實作》一 書中的第1章,第1.5節,作者:r for data science cookbook 丘祐玮(david chiu),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

詞法域又稱靜态綁定,确定了一個取值如何綁定到一個函數的自由變量。它是源于範式函數式程式設計語言的重要特征,也是r語言差別于s語言的地方。在本教程中,我們會展示詞法域在r語言中是如何工作的。

準備工作

確定你已經在作業系統中安裝了r語言,完成了之前的步驟。

實作步驟

執行下列步驟,了解詞法域規則是如何工作的。

1.我們建立一個變量x,然後建立函數tmpfunc,傳回結果x+3:

《資料科學:R語言實作》——1.5 使用詞法域
《資料科學:R語言實作》——1.5 使用詞法域

運作原理

有兩種不同類型的變量綁定方法:一種是詞法綁定,另一種是動态綁定。詞法綁定也叫作靜态綁定,它的每一個綁定域都會管理變量名和詞法環境中的取值。 也就是說,如果一個變量被詞法限制了,它會搜尋最近的詞法環境中的綁定關系。與此不同的是,動态綁定會以全局狀态儲存所有的變量和取值。 也就是說,如果一個變量被動态限制了,它會與最新建立的變量綁定。

為了說明詞法綁定是如何工作的,我們首先建立了變量x,并在全局環境中指派5給x。然後,我們可以建立名為tmpfunc的函數。這個函數輸出x+3作為傳回值。盡管我們并沒有在函數tmpfunc中把任何取值指派給x,x依然在全局環境中找出了取值5。

然後,我們建立了另一個名為parentfunc的函數。在這個函數裡,我們把x指派成3,并建立嵌套函數(定義在函數中的函數)childfunc。在parentfunc函數體底部,我們調用childfunc作為函數輸出。我們發現此時函數使用了定義在parentfunc中的x,而不是定義在parentfunc之外的x。這是因為r會在全局環境中搜尋比對的符号名,并在搜尋清單中搜尋程式包的命名空間。

接下來,讓我們看一下,如果我們在全局狀态下建立名為x的字元串,并在函數中對局部變量x指派為5,會傳回什麼結果。當我們調用localassign函數時,發現該函數傳回了5,而不是字元串取值。另外,如果我們列印出x的取值,我們依然可以看到字元串結果。當局部變量和全局變量擁有同樣的名字時,函數的指派并不會改變全局狀态下的x值。如果你想在全局狀态下修改x的值,你可以使用記号<<-。

更多技能

為了檢視r的搜尋清單(或者路徑),你可以鍵入search()來列出相關結果:

《資料科學:R語言實作》——1.5 使用詞法域

繼續閱讀