发出分配环境以在R中列出

时间:2014-08-28 16:09:20

标签: r

我在将一个环境插入列表时遇到了一个奇怪的问题。如果列表中已有项目,则使用括号添加环境会出错,但如果使用美元符号表示法则不会。如果列表为空,我在使用括号分配时不会出错,但会导致列表仍然为空。我在这里做错了什么?

> x <- list()
> x['a'] <- 3    
> x['b'] <- baseenv()
Error in x["b"] <- baseenv() :
  environments cannot be coerced to other types
> x$b <- baseenv()
> x
$a
[1] 3

$b
<environment: base>
> y <- list()
> y['env'] <- baseenv()
> y
list()

R和平台信息:

R version 2.15.2 (2012-10-26)
Platform: x86_64-redhat-linux-gnu (64-bit)

1 个答案:

答案 0 :(得分:3)

问题在于使用单个方括号:

x['b'] <- baseenv()

实际上是一个列表替换。您选择元素列表(在这种情况下,只包含元素b的列表),您应该将其替换为另一个列表。但是,你给那里的环境。在您使用的替换中,您还需要在右侧提供一个列表。如果没有,R将尝试将右侧的对象转换为列表。这会产生您看到的错误。

看看下面的例子:

> x <- list(
+   a= 1:10,
+   b= "hello"
+ )

> x['b']
$b
[1] "hello"


> x[['b']]
[1] "hello"

请注意,选择x['b']会返回列表,而x[['b']]会返回元素本身。 x$b也是如此,相当于使用双括号。

因此,您有三个选项可以在该列表中包含一个环境:

x['b'] <- list(baseenv())
x[['b']] <- baseenv()
x$b <- baseenv()

如果您使用单方括号,您不应该忘记在右侧列出该列表。