2016-12-05 7 views
1

内のすべての要素から最後のベクトルを削除するI持って、次のデータ(これはデータの最初の2つのリストのサンプルです):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

我々は、要素をループ、listをサブセットするために、そのインデックスを使用し、(%%2==1)が奇数であるかどうかを確認、lengthslist要素のlengthを取得しlistheadと最後の要素を削除して更新。

i1 <- lengths(fpb)%%2==1 
fpb[i1] <- lapply(fpb[i1], head, -1) 
+0

私は、リスト内のベクトルの数はlapplyのために数字偶数か奇数であるかどうかをチェックしますか? – miababy

+0

@Ash投稿を更新しました – akrun

+1

は魅力的です。説明してくれてありがとう! – miababy

2

これはあなたが探しているものですか?

lapply(fpb, function(x) {if(length(x)%%2){x <- x[-length(x)];x}else{x}}) 

サンプル:

> fpb 
#$`1` 
#  112  113  117  118  133  134  141  142  146  147  149 
# 8.621682 7.686476 -7.769687 -7.914414 18.236435 -23.459388 40.469801 -50.372747 54.564319 50.040497 -64.389940 
#  150 
#-78.335643 

#$`2` 
#  21   22   23   24   25   26   27  237  238  240  241 
#-2.687998 2.256120 -2.907766 2.367060 2.025086 -2.453405 -2.494454 27.608937 -33.692020 29.503787 29.112791 
#  242  243 
#-39.456876 -45.235748 

> lapply(fpb, function(x) {if(length(x)%%2){x <- x[-length(x)];x}else{x}}) 
#$`1` 
#  112  113  117  118  133  134  141  142  146  147  149 
# 8.621682 7.686476 -7.769687 -7.914414 18.236435 -23.459388 40.469801 -50.372747 54.564319 50.040497 -64.389940 
#  150 
#-78.335643 

$`2` 
#  21   22   23   24   25   26   27  237  238  240  241 
# -2.687998 2.256120 -2.907766 2.367060 2.025086 -2.453405 -2.494454 27.608937 -33.692020 29.503787 29.112791 
#  242 
#-39.456876 
+0

あなたの論理的条件は完全ではありません – akrun

+0

私はそのことを実感しました。ありがとう –