2011-08-11 74 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. –