选择R中列表中每个数据集的子集

vawmfj5a  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(125)

在使用dismo包中的kfold之后,我尝试选择这个函数从R列表中的不同数据集生成的组的子集。在单个数据集中,这很容易:

#With an individual dataset:

library(dismo)

data_car <- mtcars

group_presence <- kfold(x = data_car, k = 5) # kfold is in dismo package

# Separate observations into training and testing groups:
presence_train <- data_car[group_presence != 1, ]

但是,我似乎无法让它跨R中的列表中的多个数据集工作:

#Now, with listed datasets:

data_1 <- mtcars
data_2 <- iris

mylist <- list(data_1, data_2)

mylist_data <- lapply(mylist, function(q) {
  data = q
  return(data)
})

mylist_groups <- lapply(mylist, function(q) {
  group_item = kfold(x = q, 
                k = 5)
  q$group_obj = group_item
  return(q)
})

presence_train <- mylist_groups[group_obj != 1, ]

#Result:

Error: object 'group_obj' not found
kgsdhlau

kgsdhlau1#

我们可以使用Map

out <- Map(function(x, y) x[y !=1, ], mylist, mylist_groups)

其中

mylist_groups <- lapply(mylist, function(q) {
  kfold(x = q, 
                k = 5)})
  • 输出
> str(out)
List of 2
 $ :'data.frame':   26 obs. of  11 variables:
  ..$ mpg : num [1:26] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
  ..$ cyl : num [1:26] 6 6 4 6 8 6 8 4 4 6 ...
  ..$ disp: num [1:26] 160 160 108 258 360 ...
  ..$ hp  : num [1:26] 110 110 93 110 175 105 245 62 95 123 ...
  ..$ drat: num [1:26] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
  ..$ wt  : num [1:26] 2.62 2.88 2.32 3.21 3.44 ...
  ..$ qsec: num [1:26] 16.5 17 18.6 19.4 17 ...
  ..$ vs  : num [1:26] 0 0 1 1 0 1 0 1 1 1 ...
  ..$ am  : num [1:26] 1 1 1 0 0 0 0 0 0 0 ...
  ..$ gear: num [1:26] 4 4 4 3 3 3 3 4 4 4 ...
  ..$ carb: num [1:26] 4 4 1 1 2 1 4 2 2 4 ...
 $ :'data.frame':   120 obs. of  5 variables:
  ..$ Sepal.Length: num [1:120] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
  ..$ Sepal.Width : num [1:120] 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
  ..$ Petal.Length: num [1:120] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
  ..$ Petal.Width : num [1:120] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
  ..$ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

相关问题