在 R 中对齐打印字符串的标准工具是什么?
What are the standard tools to align printed strings in R?
这里是一系列cat
语句
words = c("Hello","bar","ROCKnROLL","R","Supercalifragilisticexpialidocious")
for (i in 1:length(words))
{
cat(paste0(words[i], "\t: ",nchar(words[i]),"\n"))
}
Hello : 5
bar : 3
ROCKnROLL : 9
R : 1
Supercalifragilisticexpialidocious : 34
我该怎么做才能像这样对齐它们
Hello : 5
bar : 3
ROCKnROLL : 9
R : 1
Supercalifragilisticexpialidocious : 34
或者像这样
Hello : 5
bar : 3
ROCKnROLL : 9
R : 1
Supercalifragilisticexpialidocious : 34
或者最终像这样
Hello : 5
bar : 3
ROCKnROLL : 9
R : 1
Supercalifragilisticexpialidocious : 34
试试这个:
words = c("Hello","bar","ROCKnROLL","R","Supercalifragilisticexpialidocious")
for (i in 1:length(words)) {
print(sprintf("%-40s:%d", words[i], nchar(words[i])))
}
输出:
[1] "Hello :5"
[1] "bar :3"
[1] "ROCKnROLL :9"
[1] "R :1"
[1] "Supercalifragilisticexpialidocious :34"
这基本上是一个固定宽度的文件。 base R没有这个功能(只有read.fwf
),但是gdata::write.fwf
会起作用
## create a data frame to write
words = c("Hello","bar","ROCKnROLL","R","Supercalifragilisticexpialidocious")
dat <- data.frame(words = words, sep = ':', nchar = nchar(words))
## write.fwf without a file name will print to the console
(co <- capture.output(gdata::write.fwf(dat, width = c(max(nchar(words)), 1, 3), justify = 'r'))[-1])
# [1] " Hello : 5" " bar : 3"
# [3] " ROCKnROLL : 9" " R : 1"
# [5] "Supercalifragilisticexpialidocious : 34"
## cat it
cat(co, sep = '\n')
# Hello : 5
# bar : 3
# ROCKnROLL : 9
# R : 1
# Supercalifragilisticexpialidocious : 34
您可以更改对齐方式以获得其他对齐方式
cat(capture.output(gdata::write.fwf(dat, width = c(max(nchar(words)), 1, 3), justify = 'c'))[-1], sep = '\n')
# Hello : 5
# bar : 3
# ROCKnROLL : 9
# R : 1
# Supercalifragilisticexpialidocious : 34
cat(capture.output(gdata::write.fwf(dat, width = c(max(nchar(words)), 1, 3), justify = 'l'))[-1], sep = '\n')
# Hello : 5
# bar : 3
# ROCKnROLL : 9
# R : 1
# Supercalifragilisticexpialidocious : 34
这里是一系列cat
语句
words = c("Hello","bar","ROCKnROLL","R","Supercalifragilisticexpialidocious")
for (i in 1:length(words))
{
cat(paste0(words[i], "\t: ",nchar(words[i]),"\n"))
}
Hello : 5
bar : 3
ROCKnROLL : 9
R : 1
Supercalifragilisticexpialidocious : 34
我该怎么做才能像这样对齐它们
Hello : 5
bar : 3
ROCKnROLL : 9
R : 1
Supercalifragilisticexpialidocious : 34
或者像这样
Hello : 5
bar : 3
ROCKnROLL : 9
R : 1
Supercalifragilisticexpialidocious : 34
或者最终像这样
Hello : 5
bar : 3
ROCKnROLL : 9
R : 1
Supercalifragilisticexpialidocious : 34
试试这个:
words = c("Hello","bar","ROCKnROLL","R","Supercalifragilisticexpialidocious")
for (i in 1:length(words)) {
print(sprintf("%-40s:%d", words[i], nchar(words[i])))
}
输出:
[1] "Hello :5"
[1] "bar :3"
[1] "ROCKnROLL :9"
[1] "R :1"
[1] "Supercalifragilisticexpialidocious :34"
这基本上是一个固定宽度的文件。 base R没有这个功能(只有read.fwf
),但是gdata::write.fwf
会起作用
## create a data frame to write
words = c("Hello","bar","ROCKnROLL","R","Supercalifragilisticexpialidocious")
dat <- data.frame(words = words, sep = ':', nchar = nchar(words))
## write.fwf without a file name will print to the console
(co <- capture.output(gdata::write.fwf(dat, width = c(max(nchar(words)), 1, 3), justify = 'r'))[-1])
# [1] " Hello : 5" " bar : 3"
# [3] " ROCKnROLL : 9" " R : 1"
# [5] "Supercalifragilisticexpialidocious : 34"
## cat it
cat(co, sep = '\n')
# Hello : 5
# bar : 3
# ROCKnROLL : 9
# R : 1
# Supercalifragilisticexpialidocious : 34
您可以更改对齐方式以获得其他对齐方式
cat(capture.output(gdata::write.fwf(dat, width = c(max(nchar(words)), 1, 3), justify = 'c'))[-1], sep = '\n')
# Hello : 5
# bar : 3
# ROCKnROLL : 9
# R : 1
# Supercalifragilisticexpialidocious : 34
cat(capture.output(gdata::write.fwf(dat, width = c(max(nchar(words)), 1, 3), justify = 'l'))[-1], sep = '\n')
# Hello : 5
# bar : 3
# ROCKnROLL : 9
# R : 1
# Supercalifragilisticexpialidocious : 34