r:将自定义函数中创建的列表中的n个数据帧子集分配给全局环境中的对象
这是我第一次尝试列表。我尝试清理我的代码,并在函数中放入一些代码。 一个想法是用一个函数将一个大数据帧子集成多个子集。因此,我可以在需要时使用函数调用子集 对于mtcars数据框,我想解释一下我正在尝试做什么:r:将自定义函数中创建的列表中的n个数据帧子集分配给全局环境中的对象,r,list,function,dataframe,subset,R,List,Function,Dataframe,Subset,这是我第一次尝试列表。我尝试清理我的代码,并在函数中放入一些代码。 一个想法是用一个函数将一个大数据帧子集成多个子集。因此,我可以在需要时使用函数调用子集 对于mtcars数据框,我想解释一下我正在尝试做什么: 将id添加到mtcars 创建一个带有一个参数(mtcars)的函数,该参数输出子集数据帧列表(mtcars1、mtcars2、mtcars3)->此处学习:由Federico Giorgi回答 我的目标是创建列表。但是,当看到全局环境中的3个子集数据帧对象(mtcars1、mtcars
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)
}
库(dplyr)
#将id添加到mtcars
mtcars%
变异(id=行号()
#在3个数据帧中创建要子集的函数
my_func_cars最好输出一个命名的列表
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)
}
-检查对象
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
无需运行for()
循环即可查看数据帧。您只需运行:output
,它们都会显示在控制台中。如果您想查看特定的数据帧,可以使用[[
:输出[[1]]
,输出[[2]]
和输出[[3]]
对列表进行子集。非常有用的建议。谢谢。感谢阿克伦。您的第一个解决方案对我来说是最清晰的。您能再次发布此信息吗。我认为在您的最新编辑中:mtcars%mutate(id=row_number())缺少。请解释一下nm1@TarJae Thanks,我用添加的id
更新了传递到函数中的输入数据。关于deparse
,substitute。传递的对象是data.framemtcars
,因此,通过执行deparse(substitute
,我们将对象名称作为字符串“mtcars”
,我们将使用它来创建列表元素的名称。dplyr/purrr
lst
具有分配选项(:=
)lhs上的名称基于object的值。我将硬编码的mtcars1
,mtcars2
更改为函数中更自动的方式。也可以使用更多具有列名的参数
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