子集不同数据类型的列表

时间:2011-08-11 19:48:04

标签: r

我有一个不同数据类型的列表(因子,data.frames和向量,所有相同的长度或行数),我想做的是通过向量对列表的每个元素进行子集(让我们调用它表示行名称。

如果是data.frame()我会:

x <- x[rows,] 

如果是vector()或factor(),我会:

x <- x[rows]

所以,我一直在玩这个:

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

那么,我如何实现获取子集化数据列表的目标呢?

1 个答案:

答案 0 :(得分:1)

我认为这是YAIEP(还有另一个问题)。来自?ifelse

  

ifelse返回一个与填充的test相同形状的值   选择是或否的元素取决于是否   测试元素为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)