我有以下代码
l=list()
funcF=function(x)
{
l[[x]] ="somevalue"
}
funcF("A")
funcF("B")
print(l)
我在期待
print(l)
打印
$A
[1] "somevalue"
$B
[1] "somevalue"
但打印
"list()"
为什么列表为空,如果我在其工作的函数之外设置相同的值。 我错过了什么?
答案 0 :(得分: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
是分配给插槽的值。
干杯!