R从列表中的所有元素中删除最后一个向量

时间:2016-12-05 15:21:20

标签: r

我有以下数据(这是数据中前两个列表的示例):

fpb<-structure(list(`1` = structure(c(-2.47981979633349, 8.6216816156608, 
7.68647649257742, -7.76968675333804, -7.9144137972946, 18.2364354703205, 
-23.4593879621981, 40.469801451573, -50.3727468353916, 54.564318651129, 
50.040496691847, -64.389939923162, -78.3356428303116), .Names = c("11", 
"112", "113", "117", "118", "133", "134", "141", "142", "146", 
"147", "149", "150")), `2` = structure(c(-2.6879977130791, 2.25612015337798, 
-2.90776581499623, 2.36705960916142, 2.02508598649777, -2.45340515893393, 
-2.49445436737825, 27.6089374776595, -33.6920201405386, 29.5037874749887, 
29.1127907940704, -39.4568756080229, -45.2357483355595), .Names = c("21", 
"22", "23", "24", "25", "26", "27", "237", "238", "240", "241", 
"242", "243"))))

我想检查每个子列表中是否有偶数或奇数。如果有奇数,我想删除最后一个向量。

这是我尝试的内容,但我只是从每个列表中获取第一个向量。

fpb2<-fpb
for (i in 1:500){
  if(length(fpb[[i]]%%2!=0)){N<-fpb[[i]][-length(fpb[[i]])]}
  fpb2[i]=N
}

1 个答案:

答案 0 :(得分:1)

我们使用length获取list元素的lengths,检查它是否为奇数(%%2==1),使用该索引对list进行子集化,遍历元素并使用head删除最后一个元素并更新list

i1 <- lengths(fpb)%%2==1
fpb[i1] <- lapply(fpb[i1], head, -1)
相关问题