2014-08-30 71 views
-1

添加項目我有下面的代碼R可以不在列表功能

l=list() 
funcF=function(x) 
{ 
    l[[x]] ="somevalue" 
} 

funcF("A") 
funcF("B") 
print(l) 

我期待

print(l) 

打印

$A 
[1] "somevalue" 


$B 
[1] "somevalue" 

但它打印

"list()" 

爲什麼這個列表是空的,如果我在它的函數之外設置了相同的值。 我錯過了什麼?

回答

1

功能是一個封閉的系統。函數內的對象不會「知道」外部有一個列表l

如果你想操作一個對象,如列表l,你必須將它傳遞給該函數。否則,它超出了功能的範圍,並且無法訪問它。

看看我重新寫這樣的功能會發生什麼:

l=list() 
funcF=function(x,y,z) 
{ 
    x[[y]] = z 
    return(x) 
} 

funcF(l,"A","someA") 

#> funcF(l,"A","someA") 
#$A 
#[1] "someA" 

funcF(l,"B","someB") 

#> funcF(l,"B","someB") 
#$B 
#[1] "someB" 

l <- funcF(l,"A","someA") 
l <- funcF(l,"B","someB") 
l 

#> l 
#$A 
#[1] "someA" 
# 
#$B 
#[1] "someB" 

在新編寫的函數x是目標列表,y表示「插槽」需要填補,而z是價值這是分配給該插槽。

乾杯!

+0

謝謝@SimonG ...這解釋它。我的函數也需要返回一些其他值,R中有參數嗎? – 2014-08-30 21:23:20