r:如何使用Lappy从多个数据帧中的单独列表中删除行号

r:如何使用Lappy从多个数据帧中的单独列表中删除行号,r,list,lapply,R,List,Lapply,我在列表对象中组织了许多数据帧。我还有第二个向量列表,其中包含我想在数据帧中删除的行号。对于每个数据帧,要删除的行是不同的。因此,数据帧列表中的元素数量等于向量列表中的元素数量。下面是我试用过的代码: test_list<-vector(mode="list",5) test_list<-lapply(test_list, function(x) data.frame(1,1:10,"c")) vec_list<-vector(mode="list",5) vec_list&l

我在列表对象中组织了许多数据帧。我还有第二个向量列表,其中包含我想在数据帧中删除的行号。对于每个数据帧,要删除的行是不同的。因此,数据帧列表中的元素数量等于向量列表中的元素数量。下面是我试用过的代码:

test_list<-vector(mode="list",5)
test_list<-lapply(test_list, function(x) data.frame(1,1:10,"c"))
vec_list<-vector(mode="list",5)
vec_list<-lapply(vec_list, function (x) x<-sample(seq(1,10),4))
clean_list<-lapply(test_list, function (x,y) clean_list<-x[-y,],vec_list)

test\u list如果要使用
lappy
,一种方法是:

  lapply(seq_along(test_list), function(i) test_list[[i]][-vec_list[[i]],])
基准 在中等数据列表上

 set.seed(45)
 test_list<-vector(mode="list",25e3)
 test_list<-lapply(test_list, function(x) data.frame(1,1:10,"c"))
 vec_list<-vector(mode="list",25e3)
 vec_list<-lapply(vec_list, function (x) x<-sample(seq(1,10),4))

 library(microbenchmark)
 f1 <- function() lapply(seq_along(test_list), function(i) test_list[[i]][-vec_list[[i]],])
 f2 <- function() Map(function(l, v) l[-v,], test_list, vec_list)

 microbenchmark(f1(), f2(), unit="relative", times=25L)
 #Unit: relative
 #expr       min        lq  median       uq       max neval
 #f1() 0.9874164 0.9977816 1.00573 1.000419 0.9837334    25
 #f2() 1.0000000 1.0000000 1.00000 1.000000 1.0000000    25
set.seed(45)

测试列表如果要使用
lappy
,一种方法是:

  lapply(seq_along(test_list), function(i) test_list[[i]][-vec_list[[i]],])
基准 在中等数据列表上

 set.seed(45)
 test_list<-vector(mode="list",25e3)
 test_list<-lapply(test_list, function(x) data.frame(1,1:10,"c"))
 vec_list<-vector(mode="list",25e3)
 vec_list<-lapply(vec_list, function (x) x<-sample(seq(1,10),4))

 library(microbenchmark)
 f1 <- function() lapply(seq_along(test_list), function(i) test_list[[i]][-vec_list[[i]],])
 f2 <- function() Map(function(l, v) l[-v,], test_list, vec_list)

 microbenchmark(f1(), f2(), unit="relative", times=25L)
 #Unit: relative
 #expr       min        lq  median       uq       max neval
 #f1() 0.9874164 0.9977816 1.00573 1.000419 0.9837334    25
 #f2() 1.0000000 1.0000000 1.00000 1.000000 1.0000000    25
set.seed(45)

test_list当您有多个对应对象的列表时,
Map
mappy
函数比
lappy
更易于使用

Map(function(l, v) l[-v,], test_list, vec_list)

当您有多个对应对象列表时,
Map
mappy
函数比
lappy
更易于使用

Map(function(l, v) l[-v,], test_list, vec_list)

太好了,两种解决方案都非常有效。微基准似乎是评估函数效率的一种非常有用的方法。非常感谢!太好了,两种解决方案都非常有效。微基准似乎是评估函数效率的一种非常有用的方法。非常感谢!