第四天

函數(shù)在運(yùn)行時(shí),函數(shù)所創(chuàng)建的任何對象以及參數(shù)會以對象的形式存儲于運(yùn)行時(shí)環(huán)境,參數(shù)的名稱就是新對象的名稱,新對象的值就是用戶輸入的參數(shù)值。

沒有運(yùn)行命令shuffle(poker2)之前,d3沒有值,運(yùn)行shuffle(poker2)命令之后,d3<-poker2,以d3命名的對象便出現(xiàn)在了全局環(huán)境中。這就是上面說的參數(shù)的名稱 參數(shù)的名稱就是新對象的名稱,新對象的值就是用戶輸入的參數(shù)值。

調(diào)用函數(shù)時(shí)的活動環(huán)境又可以成為調(diào)用環(huán)境(calling environment)。

R運(yùn)行時(shí)需要調(diào)動一些對象,通常來說這些對象都是內(nèi)部定義的參數(shù),按照作用域規(guī)則,R會先從運(yùn)行時(shí)環(huán)境搜索,然后父環(huán)境,并依次向上檢索,而內(nèi)部參數(shù)在運(yùn)行時(shí)環(huán)境就可以搜索到。

函數(shù)運(yùn)行后的結(jié)果會返回到調(diào)用環(huán)境,如果將函數(shù)的運(yùn)行結(jié)果賦值給某個(gè)對象,那么該對象會存儲在調(diào)用環(huán)境中。

函數(shù)中的對象,如果是在全局環(huán)境定義的,那么函數(shù)運(yùn)行時(shí)就會在全局環(huán)境中搜索到原對象;如果是在函數(shù)內(nèi)部定義的,那么就會在運(yùn)行時(shí)環(huán)境搜索到該對象副本。

這個(gè)概念有些難理解,能不能理解成,函數(shù)運(yùn)行時(shí),運(yùn)行時(shí)環(huán)境相當(dāng)父環(huán)境的一個(gè)拷貝環(huán)境,將父環(huán)境的對象拷貝到運(yùn)行時(shí)環(huán)境中進(jìn)行一系列運(yùn)算然后返回結(jié)果,不管在運(yùn)行時(shí)環(huán)境對這些拷貝對象做如何的更改,父環(huán)境中的原對象都不會發(fā)生變化。這就類似于PS中新建一個(gè)拷貝圖層,為了不改變原圖層,在復(fù)制圖層中進(jìn)行修圖,最終要的是拷貝圖層呈現(xiàn)的結(jié)果。

現(xiàn)在就想象是在用函數(shù)畫畫,既可以在原圖層畫,也可以在復(fù)制圖層畫。上述的命令含義依次是:在原圖層(工作時(shí)環(huán)境的父環(huán)境)上建立d3,在poker2的復(fù)制圖層上編輯poker2,顯示poker2原圖的前三行。接下來將第二步和第三步重復(fù)一下,注意觀察結(jié)果,第二步的值變了,第三步依然沒變。
將此圖和上圖比較,差別就在于上圖運(yùn)算過程中除了對象d3是在全局環(huán)境,運(yùn)行時(shí)環(huán)境中其它的對象都是復(fù)制對象,除非輸入的參數(shù)也是d3。下圖中poker2對象在全局環(huán)境,整個(gè)函數(shù)運(yùn)算也都是針對全局環(huán)境中的poker2進(jìn)行的。所以上下圖結(jié)果又很大的區(qū)別。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容