如何基于r中的条件访问列表元素

时间:2019-03-06 11:19:21

标签: r list

这似乎对我来说很简单,但是我对此一无所知。可以说我有这样的列表:

# default settings for sessions [DEFAULT] FileStorePath=store FileLogPath=log ConnectionType=initiator ReconnectInterval=60 SenderCompID=TW [SESSION] BeginString=FIX.4.2 ResetSeqNumFlag=Y ResetOnLogon=Y TargetCompID=ISLD StartTime=00:00:00 EndTime=00:00:00 HeartBtInt=30 SocketConnectPort=50182 SocketConnectHost=127.0.0.1 DataDictionary=/Volumes/Untitled2/python_projects/FIX_api/spec/fix/FIX42.xml LogonTimeout=50 CheckLatency = Y MaxLatency = 120

我使用#!/usr/bin/env bash users=$(aws iam list-users \ --query 'Users[].UserName' \ --output text ) for user in $users ; do groups=$(aws iam list-groups-for-user \ --user-name $user \ --query 'Groups[].GroupName' \ --output text \ | paste -s -d, - # join newlines as comma-separated values ) printf "%s\t%s\n" $user $groups done 使其与原始数据相似,但此处适用任何条件。现在,我想从列表中仅提取那些不是my_list=list(integer(0),c(4,3,3),integer(0),integer(0),c(5,2,5),integer(0))的元素,从而像这样创建新的2元素列表:

integer(0)

我知道如何对数据框执行此操作,但是我不确定如何正确处理列表的每个元素。我尝试对每个元素使用条件integer(0),但这只是返回给我一个长度相同的新列表,其中每个元素都是答案(如果list_I_try_to_make=list(c(4,3,3),c(5,2,5))仅返回lapply

5 个答案:

答案 0 :(得分:2)

您可以使用lengths

my_list[lengths(my_list) > 0]
[[1]]
[1] 4 3 3

[[2]]
[1] 5 2 5

答案 1 :(得分:1)

这是一种解决方案:

my_list[ !unlist(lapply(my_list,identical,integer(0))) ]

答案 2 :(得分:1)

尝试一下:

my_filter=unlist(lapply(my_list,length))>0
my_list[my_filter]
[[1]]
[1] 4 3 3

[[2]]
[1] 5 2 5

答案 3 :(得分:1)

您可以使用Filter

my_list <- list(integer(0),c(4,3,3),integer(0),integer(0),c(5,2,5),integer(0))
Filter(function(x) length(x)>0, my_list)
# [[1]]
# [1] 4 3 3
# 
# [[2]]
# [1] 5 2 5

答案 4 :(得分:0)

您可以使用purrr软件包,在处理列表时非常方便。

library(purrr)

keep(my_list, function(x) length(x) > 0)