R函数也返回NULL

时间:2018-02-18 15:34:30

标签: r

最近我开始研究R并试图复制我的一些python项目。 例如,我有两个向量:

k = c(1,2,3,4,11,23,24,25,26)
l = c(1,2,3,4,5,6,7,8,11)

功能:

test_function <- function(b) {
  if (b %in% l) {
    return(b)
}

运行功能后

sapply(k, test_function)

它也返回NULL

[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 4

[[5]]
[1] 11

[[6]]
NULL

[[7]]
NULL

[[8]]
NULL

[[9]]
NULL

为什么返回NULL?谢谢你的任何解释。

1 个答案:

答案 0 :(得分:0)

k = c(1,2,3,4,11,23,24,25,26)
l = c(1,2,3,4,5,6,7,8,11)

我猜你实际上希望测试k中找到的l的每个元素:

k[ sapply(k, `%in%`, l) ]  # inner result is logical vector used to select items
#[1]  1  2  3  4 11

if函数不适合单独测试多个条件,但我猜您怀疑。 sapply函数返回一个列表,其中包含传递的每个项的值,然后因为结果中有NULL,它无法简化。 R不认为NULL与NA相同。如果你构造了test_function,那么当一个项目不在测试向量中时,NA会被重新启动,那么sapply就能够简化:

 test_function2 <- function(b) {
   if (b %in% l) {
     return(b)
 } else{NA} }
 sapply( k, test_function2)
#[1]  1  2  3  4 11 NA NA NA NA

我看到提及intersect的评论,在进行集合比较时也是一个很好的记忆功能。然后还有match

k[ match(l,k)]   # match returns position indexing
[1]  1  2  3  4 NA NA NA NA 11