在无for循环的嵌套列表中变异数据帧
我有一个数据帧列表(以及研究敏感性分析的参数),我希望以相同的方式对每个数据帧进行变异。预期输出由以下代码生成(新列在无for循环的嵌套列表中变异数据帧,r,R,我有一个数据帧列表(以及研究敏感性分析的参数),我希望以相同的方式对每个数据帧进行变异。预期输出由以下代码生成(新列x2)。是否有一种方法可以将生成的数据帧(newdfs)分配给列表,而不使用for循环 models <- list(m1 = list('params' = list('start'='2014-01-01'), 'data' = data.frame(y=c(1,2,3), x1=c(4,5,6))),
x2
)。是否有一种方法可以将生成的数据帧(newdfs
)分配给列表,而不使用for
循环
models <- list(m1 = list('params' = list('start'='2014-01-01'),
'data' = data.frame(y=c(1,2,3), x1=c(4,5,6))),
m2 = list('params' = list('start'='2017-01-01'),
'data' = data.frame(y=c(1,2,3), x1=c(7,8,9))))
newdfs <- lapply(models, function(z) {z$data$x2 <- z$data$x1 + 1
z$data})
# Can I do this without "for"?
for(x in 1:length(models)) models[[x]]$data <- newdfs[[x]]
型号您可以尝试以下方法:
newdfs <- lapply(models, function(z) {z$data$x2 <- z$data$x1 + 1
return(z)})
$m1
$m1$params
$m1$params$start
[1] "2014-01-01"
$m1$data
y x1 x2
1 1 4 5
2 2 5 6
3 3 6 7
$m2
$m2$params
$m2$params$start
[1] "2017-01-01"
$m2$data
y x1 x2
1 1 7 8
2 2 8 9
3 3 9 10
newdfs修改lappy()
中的函数以返回z
而不是z$data
:
lapply(models, function(z) {z$data$x2 <- z$data$x1 + 1 ; z})
map()
+map\u at()
transpose()
+map()
如此简单和令人满意!谢谢鸭子。@BillO'Brien太好了,它帮了你。如果你对这个答案感到满意,你可以点击这个问题左侧的勾号来接受它:)绝对可以。让我做一个好公民,给其他人一个回答的机会,然后我会记下来。@BillO'Brien当然你是对的:)我也检查了你的谷歌学者档案。真是太神奇了。你的父亲是个基因统计学家,所以你现在肯定有很多工作要做。很好的职业。谢谢,我很荣幸:)现在有很多共青藤研究正在进行中。
library(purrr)
map(models, map_at, "data", transform, x2 = x1 + 1)
models %>%
transpose %>%
`[[<-`(., "data", map(.$data, transform, x2 = x1 + 1)) %>%
transpose
$m1
$m1$params
$m1$params$start
[1] "2014-01-01"
$m1$data
y x1 x2
1 1 4 5
2 2 5 6
3 3 6 7
$m2
$m2$params
$m2$params$start
[1] "2017-01-01"
$m2$data
y x1 x2
1 1 7 8
2 2 8 9
3 3 9 10