代码之家  ›  专栏  ›  技术社区  ›  TarJae

r: 将自定义函数中创建的列表中的n个数据帧子集分配给全局环境中的对象

  •  1
  • TarJae  · 技术社区  · 5 年前

    对于mtcars数据帧,我想解释一下我正在尝试做什么:

    1. 创建一个带有一个参数(mtcars)的函数,该参数输出子集数据帧列表(mtcars1、mtcars2、mtcars3)->此处学习: How to assign from a function which returns more than one value? 费德里科·乔治的回答

    列表就是我要实现的。当mts1是全局数据帧时,请参见mts3。因此,如何使用函数从列表中调用这3个数据帧对象。谢谢!

    我的代码:

    library(dplyr)
    # add id to mtcars
    mtcars <- mtcars %>% 
        mutate(id = row_number())
    
    # create function to subset in 3 dataframes
    
    my_func_cars <- function(input){
        # first subset
        mtcars1 <- mtcars %>% 
            select(id, mpg, cyl, disp)
        
        # second subset
        mtcars2 <- mtcars  %>% 
            select(id, hp, drat, wt, qsec)
        
        # third subset
        mtcars3 <- mtcars %>% 
            select(id, vs, am, gear, carb)
        
        output <- list(mtcars1, mtcars2, mtcars3)
        return(output)
    }
    
    
    output<-my_func_cars(mtcars)
    
    for (i in output) {
        print(i)
    }
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   akrun    5 年前

    输出一个命名的 list

    library(dplyr)
    library(stringr)
    
    
    my_func_cars <- function(input){
    
        nm1 <- deparse(substitute(input))
        # first subset
        obj1 <- input %>% 
            select(id, mpg, cyl, disp)
        
        # second subset
        obj2 <- input  %>% 
            select(id, hp, drat, wt, qsec)
        
        # third subset
        obj3 <- input %>% 
            select(id, vs, am, gear, carb)
        
       dplyr::lst(!! str_c(nm1, 1) := obj1, 
                  !! str_c(nm1, 2) := obj2, 
                  !! str_c(nm1, 3) := obj3)
        
    }
    

    list2env 在全局环境中创建对象

    mtcars <- mtcars %>% 
                   mutate(id = row_number())
    list2env(my_func_cars(mtcars), .GlobalEnv)
    

    -检查物体

    head(mtcars1, 2)
    #  id mpg cyl disp
    #1  1  21   6  160
    #2  2  21   6  160
    
    head(mtcars2, 2)
    #  id  hp drat    wt  qsec
    #1  1 110  3.9 2.620 16.46
    #2  2 110  3.9 2.875 17.02
    
    
    head(mtcars3,  2)
    #  id vs am gear carb
    #1  1  0  1    4    4
    #2  2  0  1    4    4
    
    推荐文章