Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在无for循环的嵌套列表中变异数据帧_R - Fatal编程技术网

在无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