我想问一下,在我们在gtext中输入文本之后是否有办法对齐文本。 例如
x <- c(123.4, 5.6)
y <- c(1.2, 3.657)
z <- c(12345.6, 789.4)
df <- data.frame(x, y, z)
df.co <- capture.output(df) # get df as text
for (i in 1:length(df.co))
{
str.split <- strsplit(df.co, "\\s+") # split every line in its components
}
w3 <- gwindow()
gt3 <- gtext(container=w3)
for (i in 1:length(str.split)) # length(str.split)=3
{
for (j in 1:length(str.split[[i]])) # length(str.split[[i]])=2
{
str.split[[i]][[j]] <- paste(str.split[[i]][[j]],"\t",sep="",collapse="") # add tab to each component
}
str.split[[i]] <- paste(str.split[[i]], sep="", collapse="") # join to one line
insert(gt3, str.split[[i]])
}
这样我们就可以模仿R控制台了。 非常感谢你,提前
答案 0 :(得分:2)
确保使用等宽字体。如果你不这样做那么对齐事情是非常困难的。等宽字体使每个角色占用相同的空间。
# Instead of
insert(gt3, str.split[[i]])
# Try this
insert(gt3, str.split[[i]], font.attr = c(family="monospace"))
答案 1 :(得分:2)
gWidgets中没有办法在右对齐/中心/等意义上对齐文本。
我推荐使用@Dason建议的等宽字体(虽然这似乎是我的默认设置)。
就您的代码而言,您可以将其清理一下:
i
并且您每次都在撰写str.split
str.split[[i]]
str.split
的每一行,您可以一次性完成。总结:
x <- c(123.4, 5.6)
y <- c(1.2, 3.657)
z <- c(12345.6, 789.4)
df <- data.frame(x, y, z)
df.co <- capture.output(df) # get df as text
# @@ don't need loop
str.split <- strsplit(df.co, "\\s+") # split every line in its components
w3 <- gwindow()
gt3 <- gtext(container=w3)
# @@ collapse each str.split[[i]] by joining with '\t'.
str.joined <- sapply(str.split,function(bits) paste(bits,collapse='\t'))
insert(gt3,str.joined)
或者,您可以在df.co <- capture.output(df)
之后将所有内容替换为:
insert(gt3,df.co)
(两个并排并进行比较:insert(gt3,df.co)
右对齐数据框的每一列,与输入df
所显示的完全相同;您拥有的方法(insert(gt3,str.joined)
) left - 对齐每一列。
# insert(gt3,str.joined)/method in your question
x y z
1 123.4 1.200 12345.6
2 5.6 3.657 789.4
# insert(gt3,df.co)
x y z
1 123.4 1.200 12345.6
2 5.6 3.657 789.4