在`format()`中保留`names`属性

chhkpiq4  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(78)

我正试着把一个复杂的物体打印出来。每个对象都有一个id号存储在names属性中,以便于访问,我想在tibble中显示。由于某些原因,names属性在format()中丢失(参见下面的示例)。

format.foo <- function(x, ...) {
  print(attributes(x))
  sprintf("<%s>", names(x))
}

df <- tibble::tibble(x = {
  out <- structure(letters[1:5], bar = "zig", class = "foo")
  stats::setNames(out, 1:5)
})

df
#> $bar
#> [1] "zig"
#> 
#> $class
#> [1] "foo"
#> 
#> # A tibble: 5 × 1
#>   x    
#>   <foo>
#> 1 x    
#> 2 <foo>
#> 3 x    
#> 4 <foo>
#> 5 x

字符串
reprex package(v2.0.1)于2023 - 07 - 16创建
有没有办法在format()中检索names?使用自定义属性并不理想,因为每次修改或子集化对象时,它都会强制我绑定回属性。

xytpbqjk

xytpbqjk1#

像这样吗

  • 定义类特定的格式,返回一个 * 多列 * 项:
format.foo <- function(x, ...) cbind(name = names(x),
                                     bar = attr(x, 'bar') ,
                                     value = x
                                     )

字符串

  • 生成一些命名结构:
df <- tibble::tibble(x = {
  out <- structure(letters[1:5], bar = "zig", class = "foo") |>
  stats::setNames(nm = 1:5)
})

  • 使用format.data.frame显式格式化(它逐列应用类特定的格式):
format.data.frame(df)
x.name x.bar x.value
1      1   zig       a
2      2   zig       b
3      3   zig       c
4      4   zig       d
5      5   zig       e

相关问题