r语言 - 将函数应用于某个元素,并在嵌套列表的另一个向量中重写该元素



我有一个嵌套的向量

$a
$a$age
[1] -2702 -2621 -2945
$a$gen
[1] 109 109 105
$b
$b$age
[1] -2702 -2702 -2702
$b$gen
[1] 109 109 109

我想把$a$age的元素除以25,四舍五入,结果写入$a$gen,同样对$b$age做同样的事情,结果写入$b$gen

所以输出应该是

$a
$a$age
[1] -2702 -2621 -2945
$a$gen
[1] 108 104 117
$b
$b$age
[1] -2702 -2702 -2702
$b$gen
[1] 108 108 108

我不知道你想解决什么,虽然你可以解决这个问题:

x %>%
map_df(data.frame, .id='grp')%>%
mutate(gen = abs(ceiling(age/25)))%>%
split(~grp)%>%
map(~as.list(.x[-1]))

$a
$a$age
[1] -2702 -2621 -2945
$a$gen
[1] 108 104 117

$b
$b$age
[1] -2702 -2702 -2702
$b$gen
[1] 108 108 108

使用先前的解决方案:

mod_at1 <- function(x, name, FUN, new_name = NULL){

if(name %in% names(x)){ 
x[[if(is.null(new_name)) name else new_name]] <- FUN(x[[name]])
x
}
else if(is.list(x))lapply(x, mod_at1, name, FUN, new_name)
else x
}
mod_at1(x, 'age', function(x)abs(ceiling(x/25)), 'gen')
$a
$a$age
[1] -2702 -2621 -2945
$a$gen
[1] 108 104 117

$b
$b$age
[1] -2702 -2702 -2702
$b$gen
[1] 108 108 108

最新更新