如何在列表的元素之间添加虚线?

时间:2019-05-20 13:19:33

标签: r

我有一个这样的列表:

x <- 1
y <- 2
z <- "something"
my_list <- list("x" = x, "y" = y, "z" = z)
> my_list
$x
[1] 1
$y
[1] 2
$z
"something"

实际上,我的列表很长,包括大文本元素,因此在输出中我不容易识别它们。因此,我想在输出的列表中的每个元素之后放置一条虚线,例如

$x
[1] 1
-------------------------------------
$y
[1] 2
-------------------------------------
$z
[1] "something"
-------------------------------------

3 个答案:

答案 0 :(得分:3)

类似的事情可能起作用。

mylistprint <- function(x){

    nn <- names(x)
    ll <- length(x)
    if (length(nn) != ll) {
      nn <- paste("Component", seq.int(ll))
      }
    for (i in seq_len(ll)) {
      cat(nn[i], ":\n")
      print(x[[i]])
      cat("\n")
      cat(strrep("-", 25))
      cat("\n")
    }
    invisible(x)
}

mylistprint(my_list)

其输出为:

x :
[1] 1

-------------------------
y :
[1] 2

-------------------------
z :
[1] "something"

-------------------------

答案 1 :(得分:3)

使用mapply
也许更好的方法是使用mapply,或者至少要短得多。

fun1 <- function(x,y) cat(paste0('$', x), y,strrep("-", 25), sep = '\n')
x <- mapply(fun1, names(my_list), my_list)

此打印:

$x
1
-------------------------
$y
2
-------------------------
$z
something
-------------------------

单行

x <- mapply(function(x,y) cat(paste0('$', x), y,strrep("-", 25), sep = '\n'), names(my_list), my_list)

根据需要将其包装在功能中

print.list <- function(list) {
  x <- mapply(function(x,y) cat(paste0('$', x), y,strrep("-", 25), sep = '\n'), names(list), list)
}

答案 2 :(得分:1)

根据我的评论,您可以运行一个for循环,打印列表的每个元素,然后打印"--------...-----",然后打印列表的下一个元素,将其放入函数中,例如,

lsprint <- function(list){
  for (i in 1:length(list)){
    print(names(my_list)[i])
    print(my_list[[i]])
    print('--------------------')
  }

}
lsprint(my_list)

返回

[1] "x"
[1] 1
[1] "--------------------"
[1] "y"
[1] 2
[1] "--------------------"
[1] "z"
[1] "something"
[1] "--------------------"

编辑:添加后,您将获得名称