r - 如何在 R 中并排显示列表 - 列表的 "cbind"?

标签 r list object

我希望使用我的屏幕空间来并排查看几个简单的列表。我不是想把它们结合起来,就像 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)的解决方案包括:
  • 启动多个 R 实例,使用 GNU 分屏 screenC-A |
  • 学习ESS,让Emacs奇迹解决一切
  • 使用另一个文本编辑器(例如 Notepad++)来回移动并手动迁移文本 block

  • 我正在尝试的非天真的解决方案是:
  • 将这些写入文本文件。这里的问题是制定固定宽度间距。也许 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 , gsubformat放入容器中。使用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/

    相关文章:

    c++ - 访问用户定义类型数组的特定属性

    r - R 中文本对齐

    r - 测试向量是否包含在另一个向量中,包括重复

    bash - 系统(): why do I not have the same permissions when using R in EMACS as I do in the bash terminal?

    c++ - 从文件读取时如何从行中单独读取每个数字

    javascript - 如何访问同一类中另一个属性内的属性

    r - 在 rpart 分类树中打印没有科学记数法的日期

    .net - 数组与列表<T> : When to use which?

    Python 3 : Lists and loops

    class - VBA引用容器对象-语法和面向对象的方法