Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何检查列表中的元素是否与条件匹配?_R_List_Match - Fatal编程技术网

R 如何检查列表中的元素是否与条件匹配?

R 如何检查列表中的元素是否与条件匹配?,r,list,match,R,List,Match,我有一份清单: pairs <- list( list(Name="A",Value=11), list(Name="B",Value=17), list(Name="C",Value=23) ) 配对如果您只想知道任何列表组件是否有名称=='A': any(sapply(pairs,function(x) x$Name=='A')); ## [1] TRUE sum(sapply(pair

我有一份清单:

  pairs <- list(
    list(Name="A",Value=11), 
    list(Name="B",Value=17), 
    list(Name="C",Value=23)
  )

配对如果您只想知道任何列表组件是否有
名称=='A'

any(sapply(pairs,function(x) x$Name=='A'));
## [1] TRUE
sum(sapply(pairs,function(x) x$Name=='A'));
## [1] 1
unlist(lapply(pairs,function(x) if (x$Name=='A') x$Value));
## [1] 11
pairs[sapply(pairs,function(x) x$Name=='A')];
## [[1]]
## [[1]]$Name
## [1] "A"
##
## [[1]]$Value
## [1] 11
如果需要具有
名称=='A'
的列表组件的数量:

any(sapply(pairs,function(x) x$Name=='A'));
## [1] TRUE
sum(sapply(pairs,function(x) x$Name=='A'));
## [1] 1
unlist(lapply(pairs,function(x) if (x$Name=='A') x$Value));
## [1] 11
pairs[sapply(pairs,function(x) x$Name=='A')];
## [[1]]
## [[1]]$Name
## [1] "A"
##
## [[1]]$Value
## [1] 11
如果需要具有
名称=='A'
的列表组件的

any(sapply(pairs,function(x) x$Name=='A'));
## [1] TRUE
sum(sapply(pairs,function(x) x$Name=='A'));
## [1] 1
unlist(lapply(pairs,function(x) if (x$Name=='A') x$Value));
## [1] 11
pairs[sapply(pairs,function(x) x$Name=='A')];
## [[1]]
## [[1]]$Name
## [1] "A"
##
## [[1]]$Value
## [1] 11
如果需要具有
名称=='A'
的组件的子列表:

any(sapply(pairs,function(x) x$Name=='A'));
## [1] TRUE
sum(sapply(pairs,function(x) x$Name=='A'));
## [1] 1
unlist(lapply(pairs,function(x) if (x$Name=='A') x$Value));
## [1] 11
pairs[sapply(pairs,function(x) x$Name=='A')];
## [[1]]
## [[1]]$Name
## [1] "A"
##
## [[1]]$Value
## [1] 11
如果您想要具有
名称=='A'
的第一个内部列表(如果您确定只有一个匹配项,则可以删除
[1]
):


或者,由于您的数据看起来是规则的,您可以转换为data.frame,这将简化所有这些操作:

df <- do.call(rbind,lapply(pairs,as.data.frame));
df;
##   Name Value
## 1    A    11
## 2    B    17
## 3    C    23

如果
列表
列表
只有一个级别,则可以简单地使用
过滤器
。这将返回所需的元素:


您可以使用
rlist

library(rlist)
list.filter(pairs, Name=='A')
#[[1]]
#[[1]]$Name
#[1] "A"

#[[1]]$Value
#[1] 11
另外,我的原始版本是

 sapply(pairs, function(x) x[grep('Name',names(x))]=='A') 
 # Name  Name  Name 
 # TRUE FALSE FALSE 

尝试
sapply(成对,函数(x)x[grep('Name',names(x))]='A')
@akrun x[grep('Name',names(x))]中的错误:类型为'symbol'的对象不可子集使用您的示例,我得到
#Name TRUE FALSE
作为结果可能
temp@akrun Yes,只是输入错误。那么如何从这个向量中得到一个布尔值呢?这似乎是一个不错的包。@ColonelBeauvel一些包装函数在包中。