2012-04-17 41 views
4

我写了一个R函数来返回满足特定需求的行,但是我遇到了输出格式的问题。如何禁止函数返回R中的“Null”?

例如,某些值返回行:

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" 

回答

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 
+0

它令人惊叹!谢谢! – shao 2012-04-18 07:16:02

6

如何

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

?它将所有结果逐行组合; rbind ing一个NULL矢量没有效果。

+0

+1因为如此快速的抽签。 – Andrie 2012-04-17 17:00:02

+0

但它是否适用于'File_Not_Found'? (来自其他技术论坛的恶作剧) – 2012-04-17 17:39:10

+0

以前从未想过do.call,谢谢! – shao 2012-04-18 07:17:07