2015-04-15 59 views
0

我想編輯在父函數中定義的數據幀dat,就像在這個例子中那樣,但是輸出(從main返回)給出了沒有發生編輯的數據幀。這顯然是由於R中全局變量的濫用造成的,但是有人可能會解釋爲什麼會出現這種情況,以及我如何才能使它發生?編輯在父級環境中定義的全局對象

indat <- data.frame(a = '0', b = '0') 


main <-function(data){ 
    assign("dat", data, envir = .GlobalEnv) 
     inner1() 
     inner2() 
    return(dat)  
} 


inner1<-function(){ 
    print(dat$a) 
    dat$a <- '1' 
    return() 

} 

inner2<-function(){ 
    print(dat$b) 
    dat$b <- '1' 
    return() 
} 

回答

0

變化

dat$a <- '1' 

dat$a <<- '1' 

的< < - 值分配給全球環境,< - 運行在本地, '內在功能' 的環境。 儘管您已經創建了'data'作爲全局變量,但是當我使用'< - '運算符時,R在inner1()環境中創建了一個新的'data'變量。

+0

謝謝! – PuSh