首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中多个约束条件下的类群

R中多个约束条件下的类群
EN

Stack Overflow用户
提问于 2019-06-24 15:29:24
回答 1查看 101关注 0票数 1

目前,我试着学习R,但我坚持了以下几点。我有这张桌子

代码语言:javascript
复制
                       material       V1
1:                       Silber 450.7886
2:                Kupfer-Nickel   0.0000
3:                Silver Tantal  26.9928
4: Bimetall (Silber - Niobium))   8.9925

现在,我想把包含一串可能性列表的所有行加起来。我现在的方法是

代码语言:javascript
复制
merge <- c("Silver", "Silber")
materialsSplitted[any(sapply(merge, function(x) grepl(x, material, TRUE)))]

但问题是,我得到了与输入相同的表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-24 16:24:49

问题在于使用anysapply包装。sapply返回逻辑matrix

代码语言:javascript
复制
materialsSplitted[,sapply(merge, function(x) grepl(x, material, TRUE))]
#     Silver Silber
#[1,]  FALSE   TRUE
#[2,]  FALSE  FALSE
#[3,]   TRUE  FALSE
#[4,]  FALSE   TRUE

当我们用any包装时,根据?any的说法

该值是长度为1的逻辑向量。

因此,在这里,它有真/假值,并返回一个TRUE

代码语言:javascript
复制
materialsSplitted[, any(sapply(merge, function(x) grepl(x, material, TRUE)))]
#[1] TRUE

它被回收为行索引,以返回所有行。相反,我们需要检查每一行是否有字符串匹配。为此,我们可以使用Reduce

代码语言:javascript
复制
materialsSplitted[Reduce(`|`, lapply(merge, function(x) grepl(x, material, TRUE)))]
#                       material       V1
#1:                       Silber 450.7886
#2:                Silver Tantal  26.9928
#3: Bimetall (Silber - Niobium))   8.9925
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56739782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档