不要在lapply的列表中收集结果

时间:2018-01-29 07:58:22

标签: r

假设我的文件结构定义如下:

有三个文件夹:from django.db.models.functions import Now Model.objects.filter(...).update(timestamp=Now()) AB。每个文件夹都包含一个名为C的文件。现在我想从每个文件夹中读取文件,对它们执行一些操作并将它们导出到不在这些文件夹中的三个新文件。随后我使用file_demo.csv来做。

这里有一些演示代码:

lapply()

现在我面临的问题是,当我调用# the folder list folder_list <- c('A', 'B', 'C') # creating demo data frames set.seed(1) file_demo_a <- data.frame(X = rnorm(5), Y = rpois(5, lambda = 2)) write_csv(file_demo_a, 'A/file_demo.csv') set.seed(2) file_demo_b <- data.frame(X = rnorm(5), Y = rpois(5, lambda = 2)) write_csv(file_demo_b, 'B/file_demo.csv') set.seed(3) file_demo_c <- data.frame(X = rnorm(5), Y = rpois(5, lambda = 2)) write_csv(file_demo_c, 'C/file_demo.csv') # defining a function df_mod_func <- function(folder_name){ path_name <- paste(folder_name, 'file_demo.csv', sep = "/") new_demo <- read_csv(path_name) new_demo <- new_demo + 1 # do a new operation csv_file_name <- paste(folder_name, 'new_file_demo.csv', sep = "_") new_demo %>% write_csv(csv_file_name) # return(NULL) } lapply(folder_list, df_mod_func) 时,每个最终数据帧都会打印到控制台。这是一个问题,因为我将加载的这些数据文件非常庞大,我不希望lapply()崩溃。由于体积庞大,我也不想将它存储为对象。我也试过R return函数,但这似乎是一种hacky方式,而且我不想用无用的输出来填充我的控制台。

在这种情况下,是否有办法不让NULL(或使用任何其他函数)来收集输出而只是静默执行?

1 个答案:

答案 0 :(得分:3)

如果它不打印结果,您可以始终使用invisible(),如:

invisible( lapply( folder_list, df_mod_func ) )