微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

printlist1,2,3又长又丑;如何使用打印来打印列表[例如,无需在打印vs粘贴0之间切换就可以进行漂亮的打印]

如何解决printlist1,2,3又长又丑;如何使用打印来打印列表[例如,无需在打印vs粘贴0之间切换就可以进行漂亮的打印]

我经常为自己的控制台漂亮地写这个习惯而感到厌烦:

writeLines(paste0(“a=“,someObj))

所以我这样做:

wp = function(obj) {
    writeLines(paste0(obj))
}

我在上面使用paste0的原因是因为它很好地折叠了list’:

print(list(1,2))

[[1]]
[1] 1

[[2]]
[2] 2     # ah... my eyes >.<

vs paste0(list(1,2),collapse=‘,’)

[1]  “1,2,3”    # ahhh much better

•但是,由于wppaste0函数不能很好地打印矩阵类型的obj:

m = matrix(list(1,3,4),nrow=2,byrow=T) paste0(m)

[1] “1” “3” “2” “4”    # yikes,this is supposed to be a matrix... my eyes

如果这很快看起来非常丑陋

m=matrix(list(list(1,list(3,list(5,6),list(7,8)),byrow=T) paste0(m)

[1] “list(1,2)” “list(5,6)” “list(3,4)” “list(7,8)”   # yikes again

相反,现在print在矩阵的紧凑打印方面做得更好:

m=matrix(list(list(1,byrow=T) print(m)

      [,1]    [,2]
[1,]  List,2  List,2
[2,2   # ah.. much better...

•因此,我的问题是,如何在不随便插入淫秽的动态类型检查的情况下,制作出更好的wp漂亮打印机:

wp = function(obj) {
   if (typeof(obj) == ‘matrix’)
      writeLines(print(obj))
   else if (typeof(obj) == ‘list’)
      writeLines(paste0(obj,’))
   else 
      # etc ...
}

在base-R中必须有更好的方法来执行此操作。我更喜欢拥有自己的紧凑型utils,而不是包含一堆软件包,但是如果它确实可以归结为进行动态类型检查,则可以随意提供软件包解决方案。

解决方法

您可以覆盖打印方法-甚至包括内置类型的打印方法。

print.list <- function(x,...) {
  writeLines(paste0(x,collapse = ","))
}

print(list(1,2))
#> 1,2

或者,您可以创建自己的函数。

wp <- function(x,...) {
  UseMethod("wp")
}

wp.default <- print

wp.list <- function(x,"))
}

wp(list(1,2

wp(matrix(1:6,nrow = 2))
#>      [,1] [,2] [,3]
#> [1,]    1    3    5
#> [2,]    2    4    6

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。