当原始元素是长度为2的数字向量时,我可以覆盖列表的元素吗?

时间:2015-12-08 19:54:26

标签: r

当原始元素是长度为2的数字向量时,我可以覆盖R语言中列表的元素吗?

l <- list(a=c(3,5),b=2,c=3) # OK, CREATED a list s.t. element 'a' is a 2-length vector
l['b'] <- 8 # OK, overrided a named element 'b' of the list with a 1-length vector.
l['a'] <- c(4,5) # "Warning" emitted
(l) # BAD

它会发出警告。更糟糕的是,列表未使用新值更新。需要一些解决方法来更新预先存在的列表的2长度向量元素。可能会再次执行一个全新的列表构造函数 - 避免重写元素 - 如果很明显如何编写代码。我还不知道如何在R中编写代码。

这是R版本3.2.2(2015-08-14) - “消防安全” 版权所有(C)2015 R统计计算基金会 平台:x86_64-pc-linux-gnu(64位)

2 个答案:

答案 0 :(得分:3)

使用此:

PlaintextCorpusReader

答案归功于Sam Dickson。

答案 1 :(得分:2)

实际上,你原来的答案可能不太遥远!

尝试l['a'] <- list(c(4,5))

您只需将替换格式化为列表即可。当您像['a']这样的子集时,会返回一个列表;当你将[['a']]作为子集时, 中的将返回该列表的第a个元素(在本例中为长度为2的向量)。这就是你遇到麻烦的原因。您提供的长度为2,长度为1,包含长度为2的东西。

此外,如果您喜欢自己的答案,那么当您的列表被命名时,您也可以使用l$a。就个人而言,我更喜欢你的方法(尽管它不那么紧凑,我喜欢它与其他类似物体的子集一致......当我们看起来相同时,我更容易捕捉到子集动作。)

祝你好运!

修改:只是为了可视化,请注意列表的a元素原来是c(3,5)

> l['a'] <- list(c(4,5)) # works!!!
> l
$a
[1] 4 5

$b
[1] 2

$c
[1] 3