2011-08-11 99 views
1

我有一個不同的數據類型(因素,data.frames和向量,所有長度或行數相同)的列表,我想要做的是子集的每個元素列表由一個表示行名稱的向量(讓我們稱之爲行)列出。Subsetting不同數據類型的列表

如果這是一個data.frame()我想:

x <- x[rows,] 

如果這是一個向量()或因子()我想:

x <- x[rows] 

所以,我一直玩這個:

x <- lapply(my_list, function(x) ifelse(is.data.frame(x), x[rows,], x[rows])) 

那麼,我該如何實現獲取子集數據列表的目標?

+0

你有樣本數據? – Andrie

+0

@安德烈,你怎麼敢! :P –

回答

1

我認爲這是YAIEP(又一個如果其他問題)。從?ifelse

ifelse具有相同形狀返回一個值作爲測試其與選自元素填充 是或否取決於測試的 元素是否爲TRUE或FALSE。

看到麻煩了嗎?與測試相同的形狀。

因此,只要做到這一點:

l <- list(a = data.frame(x=1:10,y=1:10),b = 1:10, c = factor(letters[1:20])) 

rows <- 1:3 

fun <- function(x){ 
    if (is.data.frame(x)){ 
     x[rows,] 
    } 
    else{ 
     x[rows] 
    } 
} 

lapply(l,fun) 
+0

/我拍打額頭。謝謝J. –