R的缩写()用于截断数据框的列名到设定长度,以及确保唯一性等的良好检查:
abbreviate(names(dframe), minlength=2)
当然,可以使用此函数来就地缩写列名,然后打印出更改的数据框
>>names(dframe) <- abbreviate(names(dframe), minlength=2)
>>dframe
但是我想用缩写的列名打印出数据框,而不用来改变过程中的数据框。希望这可以通过print()调用中的简单格式选项来完成,尽管我通过print.data.frame等打印和格式化方法的帮助页面搜索没有找到任何明显的解决方案(可用的选项似乎更多格式化列值,而不是它们的名称。)
那么,print()或format()是否有任何在列名上调用abbreviate()的选项?如果没有,是否有办法将abbreviate()应用于数据框的列名称,然后再将其传递给print(),同样不会更改传递的数据框?
我想的越多,我认为唯一的方法就是将print()传递给已经缩写的列名的数据框的副本。但这对我来说不是一个解决方案,因为我不想在交互式会话期间更新原始版本时不断更新此副本。原始列名必须保持不变,因为我使用哪个(colnames(dframe)==“name_of_column”)来与数据接口。
我的最终目标是在使用Server Auditor等ssh应用程序时,在我的移动设备的小屏幕上更好地远程工作。如果列名缩写为仅2-3个字符,我仍然可以识别它们,但可以在屏幕上显示更多数据。也许甚至有R包装更适合浓缩印刷?
答案 0 :(得分:4)
您可以定义自己的打印方法
print.myDF <- function(x, abbr = TRUE, minlength = 2, ...) {
if (abbr) {
names(x) <- abbreviate(names(x), minlength = minlength)
}
print.data.frame(x, ...)
}
然后将类myDF
添加到数据并打印
class(iris) <- c("myDF", class(iris))
head(iris, 3)
# S.L S.W P.L P.W Sp
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
print(head(iris, 3), abbr = FALSE)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
print(head(iris, 3), minlength = 5)
# Spl.L Spl.W Ptl.L Ptl.W Specs
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
答案 1 :(得分:1)
只需重写print.data.frame
:
print.data.frame <-
function(x) setNames( print(x),
abbreviate(names(dframe), minlength=2) )
(您可能需要一个辅助printfull.data.frame,您首先复制print.data.frame。)