【问题标题】:Run a loop based on vector elements基于向量元素运行循环
【发布时间】:2016-12-23 16:30:31
【问题描述】:

我必须根据某些向量值运行一个循环。部分示例代码和数据如下所示:

list_store <- list()
vec <- c(3,2,3)
data_list <- lapply(list(head(mtcars,10), head(mtcars,15), head(mtcars,20), head(mtcars, 9),
                         head(mtcars,14), head(mtcars,18), head(mtcars,20), head(mtcars,10)),
                    function(x) rownames_to_column(x))
data_list1 <- lapply(list(head(mtcars,7), head(mtcars,8), head(mtcars,10)), function(x) rownames_to_column(x))
result <- lapply(data_list, function(i){
  list_store[[length(list_store) + 1]] <- merge(i, data_list1[[1]], all.y = TRUE)
})

上面的代码是我想合并data_list的前三个文件和data_list1的第一个文件,data_list的下两个文件和data_list1的第二个文件,最后是@的其他三个文件987654326@ 与data_list1 第三个文件。在我的代码中,我将data_list 的所有文件与data_list1 的第一个文件合并,但我想根据vec 更改data_list1

我可以有一个循环跟踪ij等等来完成所有的过程,但我想知道是否有任何有效的方法。

【问题讨论】:

    标签: r loops merge


    【解决方案1】:

    我们replicate 'vec' 由'vec' 的序列组成,使用它把split 'data_list' 分成3 个list 元素,每个元素都有一个list。然后,使用Map 传递来自split 数据集和'data_list1' 的相应list 元素,循环嵌套listlapplymerge 与'data_list1' 的元素,使用@ 987654331@ 将嵌套的list 转换回“data_list”的普通list 结构。

    do.call(c, 
        Map(function(x,y) lapply(x, function(dat) 
                                merge(dat, y, all.y = TRUE)), 
             split(data_list, rep(seq_along(vec), vec)),
              data_list1))
    

    【讨论】:

    • 我可以说R传奇@akrun :)
    • @AaghazHussain 谢谢你的大话,我还是一个谦虚的学习者..
    • @AaghazHussain 您是否使用cc &lt;- 42 左右创建了一个对象。在这种情况下,使用带有反引号的c
    • @AaghazHussain 可能是某些物体的后遗症。在干净的会话中尝试
    • 没错。因此,如果无意中创建了带有 c 的对象,这意味着“c”是每次解决方案。
    猜你喜欢
    • 1970-01-01
    • 2014-08-01
    • 2015-04-26
    • 1970-01-01
    • 2017-03-12
    • 2016-11-11
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多