【发布时间】: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)