詞法域又稱靜態繫結,確定了乙個取值如何繫結到乙個函式的自由變數。它是源於正規化函式式程式語言的重要特徵,也是r語言區別於s語言的地方。在本教程中,我們會展示詞法域在r語言中是如何工作的。
確保你已經在作業系統中安裝了r語言,完成了之前的步驟。
執行下列步驟,理解詞法域規則是如何工作的。
1.我們建立乙個變數x,然後建立函式tmpfunc,返回結果x+3:
2.建立函式parentfunc,其帶有巢狀函式childfunc。當我們呼叫函式parentfunc時,看看會返回什麼結果:
3.建立字串x,並建立函式localassign,在函式內部修改x:
4.我們也可以建立另外乙個函式globalassign,但是使用記號<
有兩種不同型別的變數繫結方法:一種是詞法繫結,另一種是動態繫結。詞法繫結也叫作靜態繫結,它的每乙個繫結域都會管理變數名和詞法環境中的取值。 也就是說,如果乙個變數被詞法約束了,它會搜尋最近的詞法環境中的繫結關係。與此不同的是,動態繫結會以全域性狀態儲存所有的變數和取值。 也就是說,如果乙個變數被動態約束了,它會與最新建立的變數繫結。
為了說明詞法繫結是如何工作的,我們首先建立了變數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語言實現》 3 4 使用日期格式
把每乙個資料屬性轉換成合適的資料型別之後,我們可以看到employees和salaries中的一些屬性是日期型別的。因此,我們可以計算雇員的出生日期和當前日期之間的年份數,進而得出每個雇員的年齡。這裡我們會介紹如何使用內建日期函式和lubridate程式包來操作日期格式的資料。按照之前的教程,把匯入...
《資料科學 R語言實現》 1 9 使用替代函式
在r語言的一些情況下,我們可以為乙個函式呼叫傳值。這就是替代函式的作用。我們會展示替代函式如何工作,以及如何建立自己的替代函式。確保你已經在作業系統中安裝了r語言,完成了之前的步驟。執行下列步驟,建立r中的替代函式。1.首先,使用函式names給資料指派名字 函式names的作用事實上與下列命令類似...
《資料科學 R語言實現》 1 2 建立R函式
r語言是函式的集合 使用者可以在專案中使用各個程式包中的內建函式,或者為專門的目的定義新的函式。在本教程中,我們會展示如何建立乙個r函式。執行下列步驟來建立你的第乙個r函式。1.在r控制台中鍵入下列 建立第乙個函式 2.使用下列命令,執行使用者定義的函式addnum 或者,你也可以不使用return...