【问题标题】:Returning data frames in the environment using lapply使用 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)

标签: r dataframe lapply


【解决方案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_result1df_result2df_result3

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2012-10-16
    • 1970-01-01
    相关资源
    最近更新 更多