[R語言學習筆記] - 修改自己製作的package中的全局變量

edit global variable in my package

場景

最近自己做了個R語言的package,主要是封裝一些功能函數。後面陸續增加了些功能,有點框架調用的樣子。這就涉及到包內的全局變量問題。假設我的包名爲mypackage,我想實現一個獲取遞增序號的功能。
代碼1

COUNT <- 1
get_sn <- function(){
	COUNT <- COUNT + 1
	return(COUNT)
}

多次調用mypackage::get_sn(),結果均爲2,這應該是COUNT沒有被理解爲全局變量的緣故。

代碼2

COUNT <- 1
get_sn <- function(){
	COUNT <<- COUNT + 1
	return(COUNT)
}

調用mypackage::get_sn()報錯。錯誤爲Error in COUNT <<- COUNT + 1 : 無法改變被鎖定的聯編'COUNT'的值
我理解爲COUNT被定義成了const,是read only的。
而嘗試通過直接修改,mypackage::COUNT <- 100也是不行的,錯誤是Error in mypackage::COUNT <- 1 : 找不到對象'mypackage'。這裏我只能理解爲可讀不可寫,與其他語言的namespace使用上還是有些差距。

解決方案

可以通過environment來明確要修改的變量。
代碼3

myenv <- new.env()
myenv$COUNT <- 1

get_sn <- function(){
  myenv$COUNT <- myenv$COUNT + 1
  return(myenv$COUNT)
}

多次調用mypackage::get_sn()就可獲得遞增的數字了。
這裏特別要注意的是,mypackage::myenv$COUNT <- 100直接修改也是會報錯,找不到對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章