删除列表的元素

时间:2017-03-21 17:05:11

标签: r

我有以下列表

n = 1:10
s = c("aa", "bb", "cc", "dd", "ee") 
b = c(TRUE, FALSE, TRUE, FALSE, FALSE) 
x = list(n, s, b, 3)

对于向量v,我们可以删除这样的元素:v[-(1:2)]。但是我们如何从列表中删除元素呢?假设我想要x x[[1]]现在应该删除最后两个元素 - 是否有一种简单的方法可以做到这一点?

3 个答案:

答案 0 :(得分:4)

我们可以使用head使用否定索引删除特定list元素的最后两个元素并更新list

f1 <- function(lst, ind){
           lst[[ind]] <- head(lst[[ind]], -2)
           lst
 }
f1(x, 1)
#[[1]]
#[1] 1 2 3 4 5 6 7 8

#[[2]]
#[1] "aa" "bb" "cc" "dd" "ee"

#[[3]]
#[1]  TRUE FALSE  TRUE FALSE FALSE

#[[4]]
#[1] 3

或@Frank评论中使用replace的其他选项

f2 <- function(lst, ind) replace(lst, ind, list(head(lst[[ind]], -2)))

答案 1 :(得分:0)

  Try this C# (Just substitute your values):
  [Code]

  string[] array = new string[] { "1", "2", "3", "4", "5", "6", "7" };

  List<string> list = new List<string>(array);

  //you can sort List<string>!
  list.Sort();

  list.Remove("4");//remove specieifed item.
  list.RemoveAt(2);//remove item from index.
  list.RemoveRange(1, 2);//remove a range of items.

  [/Code]

答案 2 :(得分:0)

更新:在长度计算中避免否定结果值(非常感谢@Frank)

要删除第一个列表项的最后两个元素,请使用:

x[[1]] <- x[[1]][seq_len(max(0, length(x[[1]]) - 2))]

导致

> x
[[1]]
[1] 1 2 3 4 5 6 7 8

[[2]]
[1] "aa" "bb" "cc" "dd" "ee"

[[3]]
[1]  TRUE FALSE  TRUE FALSE FALSE

[[4]]
[1] 3

请注意,OP的示例v[-(1:2)] NOT 删除最后两个元素但前两个

> n[-(1:2)]
[1]  3  4  5  6  7  8  9 10

如果您使用列表项的名称,代码甚至会更直观:

...
x = list(n=n, s, b, 3)  # name the first list item "n"
...
x$n <- x$n[seq_len(max(0, length(x$n) - 2))]

如果矢量少于两个元素,则缩短为零。