一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - R語言 - R語言中assign函數和get函數的用法

R語言中assign函數和get函數的用法

2022-01-12 14:38alphabeta12345 R語言

這篇文章主要介紹了R語言中assign函數和get函數的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

assign函數在循環時候,給變量賦值,算是比較方便。

1、給變量賦值

for (i in 1:(length(rowSeq)-1)){
assign(paste("nginx_server_fields7_", i, sep = ""), nginx_server_fields7[(rowSeq[(i-1)+1]):(rowSeq[i+1]), ])
}

 

2、通過for循環給變量a1、a2、a3賦值

for (i in 1:3){
  assign(paste("a", i, sep = ""), i:10)
}
ls()
[1] "a1" "a2" "a3" "i"
> a1
[1]  1  2  3  4  5  6  7  8  9 10
> a2
[1]  2  3  4  5  6  7  8  9 10

 

3、get和assign聯合用法

rm(list = ls())  #這個命令千萬慎重使用
for(i in 1:3){
   assign(paste("p", i, sep=""), i)
   tmp <- get(paste("p", i, sep=""))
   print(tmp)
}
[1] 1
[1] 2
[1] 3
ls()
[1] "i"   "p1"  "p2"  "p3"  "tmp"

補充:R語言函數的簡單理解

R語言結合了面向對象編程語言和函數式編程語言的特性,由于擁有函數式編程的特性,R的每一個運算符,實際上也是函數,同樣,面向對象的特性決定了你接觸到的R中所有東西(從數字到字符串到矩陣等)都是對象。

這些綜合的特質決定了R這門語言的特殊性,最大的特點就是開源,R中有許多用戶無私貢獻的包,通過這些包,可以實現強大的功能,因此,在在的統計處理或者數據挖掘等數據處理相關工作中,R常常作為數據預處理和建立初步模型的強大工具,但作為一門解釋型語言,R的運行效率比不上同等下的C等編譯型語言,特別是在高性能計算中。

因此,個人認為未來或者是現在將流行這樣一種數據處理方式:用R對數據進行預處理,同時通過R建立初步的數據處理模型,待對模型進行評估并確定如何實施之后通過更高效的語言(C語言等)來實現。

R中變量作用域的層次結構同C語言類似,但最大的不同在于,在R函數中可以創建新的函數,這樣會增加新的層次。

R擁有函數式編程的特性,基于函數式編程語言的特征,函數不會修改非局部變量,在R中,函數幾乎沒有副作用,簡單的理解為,函數的一般代碼可以讀但是不能寫非全局變量(當然通過特定函數是可以修改全局變量的)。

一般代碼表面上可以給全局變量重新賦值,但實際上這些操作只會修改全局變量在特定層次中的備份,而全局變量本身不會發生變化。如下面例子所示:

i <- 1
test <- function(){
 i <- 2
 print(sprintf("the value from test(): %i", i))
}
test()
print(sprintf("the value from global:%i", i))

執行以上代碼,結果如下所示:

R語言中assign函數和get函數的用法

在以上代碼中,i是全局變量,順序執行test()函數,在test中給i賦值為2,此時打印的結果是局部變量中的值。test()函數執行完之后再打印i的值,結果卻仍然是1,說明test中的賦值并沒有修改全局變量i。

 

一般情況下,使用R中的函數不會有副作用,可以有以下幾點理解:

1)只引用而不改變全局變量,局部變量與全局變量共享內存空間,此時的值必然相同;

2)一旦函數對全局變量重新賦值,系統將會創建一個與全局變量同名的新變量,并為這個變量分配新的內存空間,但這個新變量只處在宿主函數這個層次中,根據變量的引用關系,優先引用離自己較近的本層或者上層環境中變量,所以在該函數中基本上只會用全局變量的同名局部變量了;

3)隨著函數調用結束,系統會釋放函數中的局部變量,新創建的全局變量的同名局部變量也將銷毀,而全局變量的值并沒有因為在函數中使用而發生變化。

當然,R中也提供了特定的函數來對函數的上級層次進行寫操作,那就是<<-和assign()。

1.超賦值運算符<<-的機理為:使用<<-進行賦值操作

系統會從第一個上級層次開始,由低到高逐層進行查找,直到在某個層次中找到該變量,如果找不到該變量,系統會在頂層環境中創建一個新的變量。注意,超賦值運算符<<-只查上級,不會對本級進行查找。

如下例所示:

A)

i <- 1
testA <- function()
{
 i <<- 2
 print(sprintf("the value from testA(): %i", i))
}
testA()
print(sprintf("the value from global:%i", i))

B)

testB<-function()
{
 i<<-2
 print(sprintf("the value from testB(): %i", i))
}
testB()
print(sprintf("the value from global:%i", i))

結果如下:

A)

R語言中assign函數和get函數的用法

B)

R語言中assign函數和get函數的用法

兩次運行的結果相同,在A)中,<<-修改了全局變量值i,在testA函數中引用了修改后的值,結果為2,在B)中,<<-向上查找,沒有找到名為i的全局變量,但是系統在全局環境中創建了名為i的全局變量并為其賦值為2。

2.使用assign()函數來對非局部變量進行寫操作

該函數的特性為:向指定層次(本級或上級)中的某個變量賦值,有則修改,無則創建。

如下代碼所示:

test <-function()
{
  i <- 1 
  innertest<-function(x)
  {
       i<-3
       assign("i",2*x,pos=.GlobalEnv)
       print(sprintf("the value from innertest(): %i",i))
}
innertest(5)
print(sprintf("the value from test(): %i", i)) 
}
test()
print(sprintf("the value from global:%i", i))

結果為:

R語言中assign函數和get函數的用法

由結果可知,在test()和innertest()中的i值都沒有發生變化,而在最頂層的全局層次中沒有定義i的值,結果顯示該值為10。

原因在于,在函數test()內部定義的函數innertest()中執行了assign函數,該函數在最頂層全局層次中的變量i賦值10,但是該層中并沒有該變量,于是就就在最頂層.GlobalEnv中創建了該變量i并給其賦值,這樣在不同的函數層次中都有變量i,優先引用離自己最近的同級(已順序執行)或者上級層次中的變量,所以i出現了三個不同的輸出值。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。如有錯誤或未考慮完全的地方,望不吝賜教。

原文鏈接:https://blog.csdn.net/u011402596/article/details/42924561/

延伸 · 閱讀

精彩推薦
  • R語言基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    這篇文章主要介紹了基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    truffle52815052022-01-05
  • R語言R語言讀取xls與xlsx格式文件過程

    R語言讀取xls與xlsx格式文件過程

    這篇文章主要為大家介紹了使用R語言讀取xls與xlsx格式文件的過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪...

    Kanny廣小隸11982022-01-20
  • R語言如何用R語言繪制散點圖

    如何用R語言繪制散點圖

    這篇文章主要介紹了如何用R語言繪制散點圖,幫助大家更好的理解和學習使用R語言,感興趣的朋友可以了解下...

    菜鳥教程13002021-12-23
  • R語言R語言常量知識點總結

    R語言常量知識點總結

    在本篇文章里小編給大家整理了一篇關于R語言常量知識點總結內容,有興趣的朋友們可以學習分享下。...

    R語言教程網12102021-12-29
  • R語言R語言實現支持向量機SVM應用案例

    R語言實現支持向量機SVM應用案例

    本文主要介紹了R語言實現支持向量機SVM應用案例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    一天_pika5222022-01-18
  • R語言R語言中qplot()函數的用法說明

    R語言中qplot()函數的用法說明

    這篇文章主要介紹了R語言中qplot()函數的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    Jack_丁明12752022-01-05
  • R語言R語言gsub替換字符工具的具體使用

    R語言gsub替換字符工具的具體使用

    這篇文章主要介紹了R語言gsub替換字符工具的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    lztttao10372021-12-24
  • R語言R語言中的vector(向量),array(數組)使用總結

    R語言中的vector(向量),array(數組)使用總結

    這篇文章主要介紹了R語言中的vector(向量),array(數組)使用總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要...

    A葉子葉來5772021-11-14
主站蜘蛛池模板: 久久re这里精品23 | 荡女淫春2古装 | 日本动漫黄网站在线观看 | 第一次破女视频国产一级 | 天天综合色天天综合色sb | 国产精品久久久久毛片真精品 | 日韩爱爱| 亚洲国产精品久久无套麻豆 | 日本xxoo动图网站欧美 | 四虎影视网址 | 99热资源| 精品国产品香蕉在线观看75 | 天天操夜夜操狠狠操 | 午夜精品久久久久久中宇 | 蹭蹭妈妈的朋友小说 | 调教催眠改造np总攻 | 精品国产精品国产偷麻豆 | 99久久999久久久综合精品涩 | 美女被网站| 亚洲日韩中文字幕一区 | 亚洲国产果果在线播放在线 | 精品视频在线免费播放 | 成年男女免费视频网站 | 欧美色图亚洲天堂 | 白发在线视频播放观看免费 | 亚洲国产在线观看免费视频 | 青青热久免费精品视频精品 | 欧美专区亚洲 | 国内精品久久久久影院中国 | 双性肉文高h | 欧美日本一道高清免费3区 欧美人做人爱a全程免费 | 女人又色又爽又黄 | 免费一级毛片在级播放 | 国产成人精品第一区二区 | 国内精品久久久久久不卡影院 | 久久日本片精品AAAAA国产 | 草逼视频网址 | 操极品女神| 婷婷久久综合 | 国产精品久久久久久网站 | 视频网站入口在线看 |