打印或保留R markdown笔记本中循环每次运行的输出

打印或保留R markdown笔记本中循环每次运行的输出,r,dataframe,output,report,R,Dataframe,Output,Report,我试图通过在列表上循环并在每个数据帧上运行head()和tail(),对数据帧列表中每个数据帧的数据内容进行报告。但是,RStudio中输出到笔记本的总是最后一个 例如: # Initialize Variables list_of_df <- list() dummy_v1 <- c(1:3) dummy_v2 <- c(4:6) dummy_v3 <- 1 for (i in 1:3) { dummy_v3 <- c(i:i+3) dummy_v3

我试图通过在列表上循环并在每个数据帧上运行head()和tail(),对数据帧列表中每个数据帧的数据内容进行报告。但是,RStudio中输出到笔记本的总是最后一个

例如:

# Initialize Variables
list_of_df <- list()
dummy_v1 <- c(1:3)
dummy_v2 <- c(4:6)
dummy_v3 <- 1

for (i in 1:3) {
  dummy_v3 <- c(i:i+3)
  dummy_v3
  dummy_df <- data.frame(dummy_v1, dummy_v2, dummy_v3)
  list_of_df[[i]] <- dummy_df
}


# Illustrate my Problem

# I would like to print the following output into the notebook report in a for loop for each dataframe in list_of_df:
head(list_of_df[[1]])
tail(list_of_df[[1]])

for (i in 1:length(list_of_df)) {
  head(list_of_df[[i]])
  tail(list_of_df[[i]])
}

# output only shows the last iteration's head and tails.

#初始化变量

如果我们想要单独的输出,使用
list
作为
base R
中的返回,而不加载任何外部包

lapply(list_of_df, function(x) list(head(x), tail(x)))

使用
for
循环,它需要存储在对象中

out <- vector('list', length(list_of_df))
for(i in seq_along(list_of_df)) {
    out[[i]][["head"]] <- head(list_of_df[[i]])
    out[[i]][["tail"]] <-  tail(list_of_df[[i]])
}

out我强烈建议您不要使用基于循环的方法来解决时间序列问题,请查看包和包

无论如何,你可以用一个简单的方法来解决这个问题

library(tidyverse)
map(.x = list(head,tail),.f = exec,list_of_df)

对于我的新手同伴,你能解释一下map函数的参数吗?当然map接受一个向量,a对其应用一个函数,exec执行一个函数,所以如果你将一个函数列表传递给map,而这个函数是exec,我们执行一个函数列表,然后你只需要传递这些函数将在哪些函数上执行,在本例中,list_of_df.这也可以,但不能扩展到一个列表,因为参数映射(list_of_df,~list(head=head(.),tail=tail(.))花费了我一些阅读资料来解决这个问题。所以map的语法是:map(要作用的向量,要作用的函数)。在本例中,.x=list(head,tail)将向量定义为我要执行的函数的列表。f=exec告诉map要在列表上运行exec函数,这将转换为在列表上执行函数。可能只是我的新手,但我发现R的语法有点复杂。谢谢你!这确实需要一些时间来习惯,也许阅读我的fizz buzz示例可以帮助您?非常感谢。lapply的语法对我来说有点奇怪,但这很有效。我已经编辑了我的问题,以包含正确的代码。
for(i in seq_along(list_of_df)) {
   out[[i]][c("head", "tail")] <- list(head(list_of_df[[i]]), tail(list_of_df[[i]]) )
    }
library(tidyverse)
map(.x = list(head,tail),.f = exec,list_of_df)