do.call语句的格式

bzi*_*ggy 1 r apply rbind do.call

我试图了解如何在语句中正确格式化 lapply、rbind 和 do.call 的组合,但无法使语句正常运行。我提供了一个简单的示例函数和数据,我用它们来尝试理解格式。我完全理解我提供的场景可以使用更简单的方法来运行,这样做的目的是简单地理解格式以及如何在自定义函数上使用 lapply 和 rbind。

这是一些测试数据:

facility_id  patient_number  test_result
123          1000            25
123          1000            30
25           1001            12
25           1002            67
25           1010            75
65           1009            8
22           1222            95
22           1223            89
Run Code Online (Sandbox Code Playgroud)

我本质上是尝试使用设施 id 值列表对自定义函数内的数据进行子集化,然后希望将自定义函数生成的每个数据表绑定在一起。

这是我使用过的代码:

facilities_id_list<-c(123, 25)
facility_counts<-function(facilities_id_list){
  facility<-facilities_id_list[[i]]
  subset<-data[facility_id==facility]
}

results <- do.call("rbind", lapply(seq_along(facilities_id_list), function(i) facility_counts)
Run Code Online (Sandbox Code Playgroud)

我希望达到的结果:

facility_id  patient_number  test_result
123          1000            25
123          1000            30
25           1001            12
25           1002            67
25           1010            75
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?我需要更改格式吗?

akr*_*run 5

不使用==,而是使用%in%直接子集化

subset(data, facility_id %in% facilities_id_list)
Run Code Online (Sandbox Code Playgroud)

在OP的代码中,存在多个问题 - 1)输入参数是facilities_id_list在其中lapply,我们正在循环序列i。,2)facility_id==facility应该是data$facility_id==facility我们正在使用的[并且没有数据绑定,3)我们需要指定我们使用行索引进行子集化,默认情况下没有任何,,它被视为列索引data.frame

 facility_counts<-function(i){
  facility<-facilities_id_list[[i]]
  data[data$facility_id == facility, ]
}
> do.call(rbind, lapply(seq_along(facilities_id_list), facility_counts))
  facility_id patient_number test_result
1         123           1000          25
2         123           1000          30
3          25           1001          12
4          25           1002          67
5          25           1010          75
Run Code Online (Sandbox Code Playgroud)