我有以下数据(这是数据中前两个列表的示例):
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
}
答案 0 :(得分:1)
我们使用length
获取list
元素的lengths
,检查它是否为奇数(%%2==1
),使用该索引对list
进行子集化,遍历元素并使用head
删除最后一个元素并更新list
。
i1 <- lengths(fpb)%%2==1
fpb[i1] <- lapply(fpb[i1], head, -1)