首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在Map()或lapply()中插入了of子句,以更改combn()的行为

如果在Map()或lapply()中插入了of子句,以更改combn()的行为
EN

Stack Overflow用户
提问于 2017-08-24 17:57:34
回答 1查看 90关注 0票数 1

在执行了一些代码之后,我得到了这个列表

代码语言:javascript
复制
> test
$M
     start end
[1,]     1   1
[2,]     2   2

$M
     start end
[1,]     1   1
[2,]     2   2

$C
     start end
[1,]     5   5

它表示字符串中出现的字符(M,C)。然后,我将该列表传递给下面的Map()调用,以便为每个字符获取所有可能的组合。

代码语言:javascript
复制
ind1 = Map( function(x) lapply(1:nrow(test[[x]]), combn , x=test[[x]][,1]) , 1:length(test) )

该代码的结果如下:

代码语言:javascript
复制
> ind1
[[1]]
[[1]][[1]]
     [,1] [,2]
[1,]    1    2

[[1]][[2]]
     [,1]
[1,]    1
[2,]    2


[[2]]
[[2]][[1]]
     [,1] [,2]
[1,]    1    2

[[2]][[2]]
     [,1]
[1,]    1
[2,]    2


[[3]]
[[3]][[1]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5

换句话说,它正在执行以下操作

代码语言:javascript
复制
# For 1st item
combn(test[[1]][,] , 1 )
combn(test[[1]][,] , 2 )

# For 2nd item
combn(test[[2]][,] , 1 )
combn(test[[2]][,] , 2 )

# For 3rd item
combn(test[[3]][,] , 1 )

所以问题在第三项。如您所见,字符串中只有一个字符"C“出现,这是第五个字符。

在这种情况下,对第三项的可能组合结果的预期如下所示

代码语言:javascript
复制
[[3]]
[[3]][[1]]
     [,1] 
[1,]    5

而不是

代码语言:javascript
复制
[[3]]
[[3]][[1]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5

这是因为我的代码中的combn()正在变成combn(5, 1 )。因此,我想知道是否有任何方法在Map()或lapply()中添加ifelse子句,以检查是否只有一次出现,以及是否允许它按现有方式执行,而不执行combn()部分。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-25 00:55:39

正如您已经认识到的,当combn(x, m)是长度为1的整数向量时,它对x的处理是不同的。

要解决这个问题,只需将向量转换为列表即可。ind1 = Map( function(x) lapply(1:nrow(test[[x]]), combn, x=as.list(test[[x]][,1])), 1:length(test) )

代码语言:javascript
复制
> ind1
[[1]]
[[1]][[1]]
     [,1] [,2]
[1,] 1    2   

[[1]][[2]]
     [,1]
[1,] 1   
[2,] 2   


[[2]]
[[2]][[1]]
     [,1] [,2]
[1,] 1    2   

[[2]][[2]]
     [,1]
[1,] 1   
[2,] 2   


[[3]]
[[3]][[1]]
     [,1]
[1,] 5 

而且,如果您这样写它,它可能会更清楚一些:

ind1 <- lapply(test, function(x) { lapply( seq_len(nrow(x)), function(m) combn(as.list(x[, 1]), m)) })

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45868132

复制
相关文章

相似问题

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