如何抑制函数在R中返回“Null”?

时间:2012-04-17 16:55:31

标签: r return

我写了一个R函数来返回满足特定要求的行,但是我遇到了输出格式的问题。

例如,返回具有特定值的行:

xx.1 <- data.frame(aa= 1:5, bb = c("AA","BB","CC","DD","EE"))
xx.2 <- c("AA","DD")
ff_in <- function(x,y){
  if (toupper(x[2]) %in% y) {return(x)}
}
apply(xx.1,1,ff_in,xx.2)

然而,输出如下:

[[1]]
aa   bb 
"1" "AA" 

[[2]]
NULL

[[3]]
NULL

[[4]]
aa   bb 
"4" "DD" 

[[5]]
NULL

如何抑制R返回null,并返回类似的内容?

aa bb
"1" "AA" 
"4" "DD" 

2 个答案:

答案 0 :(得分:6)

怎么样

do.call(rbind,apply(xx.1,1,ff_in,xx.2))

?这将逐行结合所有结果; rbindNULL向量无效。

答案 1 :(得分:5)

这样做会不会更容易:

xx.1[ toupper(xx.1[[2]]) %in% xx.2 , ]

如果你需要一个函数,我相信这会更快,并且也不会产生数据帧强制转换为字符矩阵的不良副作用。

exncol <- function(df, coln, choices) df[ toupper(df[[coln]]) %in% choices , ]
exncol(xx.1, 2, xx.2)
  aa bb
1  1 AA
4  4 DD