我有以下列表
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]]
现在应该删除最后两个元素 - 是否有一种简单的方法可以做到这一点?
答案 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))]
如果矢量少于两个元素,则缩短为零。