回答类似问题here
我有一个数据框列表(即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
答案 0 :(得分:2)
我们需要将输出分配回list
或创建一个新对象。此外,在OP的代码中,该功能仅应用于第二列。我们可以遍历感兴趣的列并应用该函数或单独执行
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))