类似的问题在这里得到解答
我有一个数据框列表(即 1000(,如下所示:
> lst[1000]
$rand1000
Binomial S4 S5 S6
254 Euastacus suttoni 25.816165 4.1916527 86.3
327 Orconectes hobbsi 16.726409 5.5241308 25.0
282 Faxonella creaseri 17.026970 6.4109494 18.0
319 Orconectes durelli 14.093957 7.2342324 35.0
525 Procambarus raneyi 15.799001 6.3746574 55.1
我想将函数应用于列表中所有数据框的 S4、S5 和 S6 列。所以我写了这个函数:
lapply(lst, function(x) {x$S4 <- sensitivity.rand(x[[2]], 25); x})
(这里 'sensitivity.rand' 是一个函数,它采用向量和阈值(在上面的代码中 25 是阈值(并分配给 H 或 L(
给出输出为(这很好(:
$rand1000
Binomial S4 S5 S6
254 Euastacus suttoni H 4.1916527 86.3
327 Orconectes hobbsi H 5.5241308 25.0
282 Faxonella creaseri H 6.4109494 18.0
319 Orconectes durelli H 7.2342324 35.0
525 Procambarus raneyi H 6.3746574 55.1
但是,如果我看到原始数据框没有更改(即它和以前一样(。我该怎么做。我需要对列表中所有数据框的所有 S4、S5 和 S6 列执行此操作。这样原始数据框将变为如下所示:
> lst[1000]
$rand1000
Binomial S4 S5 S6
254 Euastacus suttoni H H H
327 Orconectes hobbsi H L H
282 Faxonella creaseri H H L
319 Orconectes durelli H L L
525 Procambarus raneyi H H H
我们需要将输出分配回list
或创建一个新对象。 此外,在 OP 的代码中,该函数仅适用于第 2 列。 我们可以遍历感兴趣的列并应用函数,也可以单独执行
lst <- lapply(lst, function(x) {x[2:4] <- lapply(x[2:4], sensitivity.rand, threshold = 25)
x})
或者如果我们正在使用 tidyverse
,这可以通过mutate_each
来完成
lst <- lapply(lst, function(x) x %>%
mutate_each(funs(sensitivity.rand(., 25)), 2:4))