在R中使用cat函数打印向量-如何避免丢失元素名称

ttygqcqt  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(76)

我在R中为特定类的对象创建了一个print方法,使用的步骤在this article中列出。作为这个任务的一部分,我想用cat函数打印一个向量,同时仍然包含它的元素名称(使用标准打印下通常会得到的漂亮间距)。但是,当我尝试这样做时,该函数删除了元素名称。下面是一个可重复的示例:

#Create a named vector
VECTOR <- c(12.5, 16.8, 10.1, 14.0)
names(VECTOR) <- c('Harry', 'Jennifer', 'Milton', 'Susan')
class(VECTOR) <- 'MyNewClass'

#Print vector using default printing (including names)
VECTOR

#Create new print method
print.MyNewClass <- function(object) {
  cat('I want to print this text, and then print the vector nicely \n \n')
  cat(object, '\n \n') }

#Print vector using new print method
VECTOR

#Restore default printing
rm(print.MyNewClass)

在默认的print调用下(使用默认的打印),向量显示元素的名称,并有很好的间距:

Harry Jennifer   Milton    Susan 
    12.5     16.8     10.1     14.0 
attr(,"class")
[1] "MyNewClass"

在新的print方法下(使用cat函数设计),矢量显示时不显示其元素的名称:

I want to print this text, and then print this vector nicely 

12.5 16.8 10.1 14

我可以尝试手动添加元素名称,但要想正确地使用间距,这样做很复杂。因此,我想知道是否有一种简单的方法可以使用cat函数(或其他函数)来打印包含元素名称的向量。

ulydmbyx

ulydmbyx1#

我不确定使用cat的方法,但要获得您正在寻找的行为,您可以在print.MyNewClass S3方法中删除class

#Create new print method
print.MyNewClass <- function(object) {
  
  # Your original cat
  cat('I want to print this text, and then print the vector nicely \n \n')
  
  # Remove class from object
  # Removes `attr(,"class")` from print
  attr(object, which = "class") <- NULL
  
  # Print
  print(object)
  
  # Add space (like you had previously)
  cat("\n\n")
  
}

#Print vector using new print method
VECTOR

下面是输出:

> VECTOR
I want to print this text, and then print the vector nicely 
 
   Harry Jennifer   Milton    Susan 
    12.5     16.8     10.1     14.0

相关问题