如何在R中从字符串列表中删除一个元素

9

在一些不太相关的答案中,我查看了这两个答案:
答案1
答案2

然而,这些方案并没有解决我的问题。

我可能误解了我的问题,并试图用错误的方法去做正确的事情。非常感谢任何帮助。

下面是我的代码,我构建了一个字符串列表,并尝试删除列表的第二个元素:

> my_strings <- "string1 string2 string3 string4 string5"
> my_list <- strsplit(my_strings,split=" ")
> #Now trying to delete one element from my_list using positive indexing
>
> my_list[[2]] <- NULL #does not work
> my_list[2] <- NULL #nope. Doesn't work either
> my_list[[1]][2] <- NULL #error: replacement has length zero
> my_list[[1]][[2]] <- NULL # error: more elements supplied than there are to replace

那么,我的问题是:如何删除my_list的第二个元素(或多个元素,比如1和3)? my_list的元素没有名称,我想通过数字索引访问它们。

6
我建议您先了解一下R中的子集和列表工作方式。mylist[[1]] <- mylist[[1]][-2] - Justin
2
重要提示:使用子集操作而不是赋值NULL - Roland
非常感谢Justin(和Roland)。使用您展示的带有范围的行对于我的目的完美地起作用。我试图使用“<- NULL”结构删除项目,但它不起作用。子集然后覆盖列表完美地工作,结果相同。所以我想我不能简单地删除元素,而是必须对列表进行子集并用较小的列表替换它。 - bomgaroto
子集操作非常适用于处理字符串列表。您可以使用正索引范围(mylist[[1]][3:7] 保留第3到第7个元素)或负索引范围(mylist[[1]][-3:-7] 删除第3到第7个元素)。再次感谢! - bomgaroto
更新:索引范围的变量确实有效,但您必须保证“两个”索引要么为负数,要么为正数。例如,仅当两个索引都为正数或负数时,mylist[[1]][var1:var2]才能正常工作。 - bomgaroto
1个回答

4

我不确定您的代码是否意图创建向量列表;使用字符向量可能更容易。首先尝试使用unlist:

my_list <- unlist(strsplit(my_strings,split=" "))

my_list <- my_list[-2]

啊,好的。那么@Justin的答案是最好的。 - canary_in_the_data_mine
你的答案很好,但是我必须在第二行再次使用list(),否则最终得到的不是一个列表。然而,Justin和Roland提出的子集选项更吸引我。尽管他们只是添加了注释,但我还是接受了你的答案。 - bomgaroto
是的,我说错了——对于造成的混淆感到抱歉!但是再次听起来像@Justin的解决方案已经满足了您的需求。 - canary_in_the_data_mine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接