我希望使用我的屏幕空间来并排查看几个简单的列表。我不是想把它们结合起来,就像 cbind
,但我不介意是否创建了新的中间结构。当然,要意识到一个列表可能有许多不同类型的对象,尽管我几乎可以保证我的列表具有相同的结构;如有必要,请随意插入“NA”或“NULL”以使事情正常进行(或者我可以弄清楚如何解决这个问题)。
以下是我想尝试并排显示的三个示例列表:
l1 <- list(e1 = "R", e2 = list("statistics", "visualization"), e3 = 0)
l2 <- list(e1 = "Perl", e2 = list("text processing", "scripting"), e3 = 0)
l3 <- list(e1 = "Matlab", e2 = list("numerical computing", "simulation"), e3 = c("academic - unknown", "professional - unknown"))
如果你有一个宽显示器,看到这些占用这么多垂直空间而在水平 channel 上占用这么少空间,这似乎是一种浪费。如果这些列表再长一点,我一次不能看到超过 2 个,而不会减少到一个小字体。
如果它更容易,
e3
l1
中的条目和 l2
可能是 "FOSS"
, 匹配 l3$e3
的字符向量,但真正的目标是 R 控制台中的布局问题。一些幼稚的、特定于接口(interface)的解决方案包括:
screen
和 C-A |
我正在尝试的非天真的解决方案是:
read.fwf
有助于。 (如果条目超出分配的空间或截断内容,则可以因错误而停止。)reshape
包裹。 xlsx
, 创建一堆单元格,每个单元格都有文本条目,然后尝试显示一个大字符矩阵。 还有其他更有效的方法吗?同样,没有什么真正需要组合为一个对象,只需在视觉显示中组合即可。
更新 1. 这是一个使用
plyr
的示例.诚然,结果是相当粗糙的——列表和列表元素的名称没有被保留。这不是很难修复,但我怀疑有可能做得比这更好。我可以打印出列表,因为 R 通常会打印它们,但是以某种方式分隔窗口。我怀疑这并不容易。combineLists <- function(manyLists){
library(plyr)
newLists <- list()
for(ixList in 1:length(manyLists)){
tmpList <- lapply(manyLists[[ixList]], paste, sep = "", collapse = ", ")
tmpVec <- as.character(tmpList)
newLists[[ixList]] <- tmpVec
}
newDF <- t(ldply(newLists))
return(newDF)
}
combineLists(list(l1, l2, l3))
最佳答案
合并一些 capture.output
, lapply
, gsub
和 format
放入容器中。使用do.call
作为粘合剂。添加 paste
去尝尝。让它酝酿一会儿:
sidebyside <- function(..., width=60){
l <- list(...)
p <- lapply(l, function(x){
xx <- capture.output(print(x, width=width))
xx <- gsub("\"", "", xx)
format(xx, justify="left", width=width)
}
)
p <- do.call(cbind, p)
sapply(seq_len(nrow(p)), function(x)paste(p[x, ], collapse=""))
}
这将治愈一切:
sidebyside(l1, l2, l3, width=30)
[1] "$e1 $e1 $e1 "
[2] "[1] R [1] Perl [1] Matlab "
[3] " "
[4] "$e2 $e2 $e2 "
[5] "$e2[[1]] $e2[[1]] $e2[[1]] "
[6] "[1] statistics [1] text processing [1] numerical computing "
[7] " "
[8] "$e2[[2]] $e2[[2]] $e2[[2]] "
[9] "[1] visualization [1] scripting [1] simulation "
[10] " "
[11] " "
[12] "$e3 $e3 $e3 "
[13] "[1] 0 [1] 0 [1] academic - unknown professional - unknown"
[14] " "
关于r - 如何在 R 中并排显示列表 - 列表的 "cbind"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213949/