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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

R开发(part8)--应用R语言中的函数环境空间

發布時間:2023/12/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R开发(part8)--应用R语言中的函数环境空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,僅供參考,有錯必糾


文章目錄

    • R開發
      • 應用R語言中的函數環境空間
        • R語言的函數環境空間
        • 封閉環境
        • 綁定環境
        • 運行環境
        • 調用環境
        • 函數環境空間圖示



R開發


應用R語言中的函數環境空間


R語言的函數環境空間


在R語言中,變量、對象、函數都存在于環境空間中,而函數又可以有自己的環境空間,我們可以在函數內再定義變量、對象和函數,循環往復就形成了我們現在用的R語言環境系統。


一般情況下,我們可以通過new.env去創建一個環境空間,但更多的時候,我們使用的是函數環境空間。函數環境空間,包括以下四方面的內容:

  • 封閉環境,每個函數都有且只有一個封閉環境空間,指向函數定義的環境空間。

  • 綁定環境,給函數指定一個名字,綁定到函數變量,如fun1<-function() {1}。

  • 運行環境,當函數運行時,在內存中動態產生的環境空間,運行結束后,會自動銷毀。

  • 調用環境,是指在哪個環境中進行的方法調用,如fun1<-function() {fun2()},函數fun2在函數fun1中被調用。


封閉環境


封閉環境是對函數空間的一個靜態定義,在函數定義時指向所在的環境空間。我們在當前的環境空間定義一個函數f1,并通過environment函數來查看封閉環境:

y <- 1 f1 <- function(x) {x + y} environment(f1) #<environment: R_GlobalEnv>

綁定環境


綁定環境就是把函數的定義和調用通過函數變量連起來。


我們新建一個環境空間e,在e的環境空間中定義一個函數g,就相當于把一個函數綁定到g變量,通過找到e環境空間中的g變量,就可以調用這個函數:

e <- new.env() e$g <- function() {1} #查看函數g的定義 e$g #function() {1} #調用函數g e$g() #1

在環境空間e中再定義一個嵌套函數:

e <- new.env() e$f <- function() {function() {1}} e$f # function() {function() {1}} e$f() # function() {1} e$f()() #1

查看函數g和f的封閉環境:

environment(e$g) #<environment: R_GlobalEnv> environment(e$f) #<environment: R_GlobalEnv>

運行環境


運行環境是函數被調用時產生的內存環境。運行環境是臨時的,當函數運行完成后,運行環境會被自動銷毀。在運行環境中定義的變量、對象和函數,也是動態創建的,隨著內存釋放而銷毀。

定義一個函數g,在函數g中,有臨時變量a和參數x:

g <- function(x) {message("Are you OK?")print(environment())a <- 1a <- a + xreturn(a) }g(10) #輸出start Are you OK? <environment: 0x00000000153fb488> [1] 11 #輸出endg(10) #輸出start Are you OK? <environment: 0x00000000153ae1a8> [1] 11 #輸出end

可以看到,我們兩次運行得到的環境地址是不同的,明函數的運行時環境,是內存臨時分配的。


調用環境


調用環境是指函數是在哪個環境中被調用的。匿名函數通常是在定義的封閉環境中被調用。

h <- function() {x <- 20x <<- 5function() {x} }x <- 10 r1 <- h() r1() #20 x #5

函數環境空間圖示


代碼:

x<-5 # 在當前環境定義變量xfun1<-function() { # 在當前環境定義fun1print("fun1") # 打印fun1環境空間print(environment())x <- 1 # 在fun1函數環境中,定義變量xfunction() {print("funX") # 打印匿名環境空間print(environment())x+15 # 從一級父環境空間中,找到變量x} }fun2 <- function() { # 在當前環境定義fun2print("fun2") # 打印fun2環境空間print(environment())x<-2 # 在fun2函數環境中,定義變量xfun1() #調用函數fun1 }f2 <- fun2() # 在當前環境空間中,調用函數fun2,綁定到f2 fx <- f2() # 在當前環境空間中,調用匿名函數,并綁定到fx fx

總結

以上是生活随笔為你收集整理的R开发(part8)--应用R语言中的函数环境空间的全部內容,希望文章能夠幫你解決所遇到的問題。

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