我有一个不同数据类型的列表(因子,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]))
那么,我如何实现获取子集化数据列表的目标呢?
答案 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)