【发布时间】:2012-02-09 15:42:22
【问题描述】:
我希望使用我的屏幕空间来并排查看几个简单的列表。我不想将它们结合起来,就像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"))
如果您有一个宽显示器,看到这些显示器占用这么多垂直空间而在水平通道上占用这么少空间,这似乎是一种浪费。如果这些列表再长一点,我一次只能看到 2 个,而不会减少到小字体。
如果它更容易,l1 和 l2 中的 e3 条目可以是 "FOSS",以匹配 l3$e3 的字符向量,但真正的目标是 R 控制台中的布局问题.
一些简单的、特定于接口的解决方案包括:
- 启动多个 R 实例,使用 GNU
screen和C-A |分屏 - 学习 ESS,让 Emacs 奇迹解决一切
- 使用另一个文本编辑器(例如 Notepad++)来回移动并手动迁移文本块
我正在尝试的非天真的解决方案是:
- 将这些内容写入文本文件。这里的问题是制定固定宽度间距。也许
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))
【问题讨论】: