我有一个这样的列表:
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"
-------------------------------------
答案 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] "--------------------"
编辑:添加后,您将获得名称