使用 lapply 返回环境中的数据帧
Posted
技术标签:
【中文标题】使用 lapply 返回环境中的数据帧【英文标题】:Returning data frames in the environment using lapply 【发布时间】:2019-08-23 21:59:05 【问题描述】:这可能是一个基本问题,但我试图构建一个在环境中创建单独数据框的函数。有一个类似的问题,所以我查看here 认为这是答案,但我做错了其他事情。
我希望这段代码在环境中创建 3 个不同的数据帧,分别称为“df_result1”、“df_result2”、“df_result3”。我认为“df_result1”将是一个以“name1”和 2 作为值的数据框。 “df_result2”将是一个以“name2”和 4 作为值的数据框。相反,我只在值窗口中显示项目。
我的问题是我做错了什么——为什么我没有在环境中获得 3 个数据帧,我需要做什么才能获得预期的结果。谢谢你。
这是我的可重现示例
library(tidyverse)
my_numbers <- c(2, 4, 6)
my_names <- c("name1", "name2", "name3")
# make data frame
my_function <- function(name, factor)
df = data.frame(student = name, number = my_numbers)
# lapply function
simple_fx <- function(my_numbers, my_function, my_names)
i = 1
for(my_name in my_names)
df <- lapply(my_names, my_function, my_numbers[[i]])
df_merged <- Reduce(function(...) merge(..., all = TRUE), df)
names(df_merged) <- paste0("df_result", i)
list2env(df_merged, envir = .GlobalEnv)
i = i + 1
simple_fx(my_numbers, my_function, my_names)
【问题讨论】:
就这么做:list2env(split(data.frame(numbers = my_numbers,names = my_names),paste0("df_results",1:3)),.GlobalEnv)
【参考方案1】:
我不建议从函数内部在全局环境中编写对象。您始终可以从函数返回数据帧列表,但这是执行 OP 尝试的一种方法。
my_function <- function(name, factor)
df = data.frame(student = name, number = factor)
return(df)
simple_fx <- function(my_numbers, my_names)
df <- Map(my_function, my_numbers, my_names)
names(df) <- paste0("df_result", seq_along(df))
list2env(df, envir = .GlobalEnv)
simple_fx(my_numbers, my_names)
我们现在在全球环境中有 3 个数据框 df_result1
、df_result2
和 df_result3
。
【讨论】:
以上是关于使用 lapply 返回环境中的数据帧的主要内容,如果未能解决你的问题,请参考以下文章
将 lapply 与 for 和 if..else 语句结合使用,将条件列添加到多个数据帧