2012-04-17 39 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