我想问一下,当我们在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控制台了。非常感谢,在此之前
发布于 2012-01-09 09:36:58
在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))将左对齐每一列。
# 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发布于 2012-01-09 09:16:31
请确保使用等宽字体。如果你不这样做,那么就很难对齐。等宽字体使每个字符占用相同的空间量。
# Instead of
insert(gt3, str.split[[i]])
# Try this
insert(gt3, str.split[[i]], font.attr = c(family="monospace"))https://stackoverflow.com/questions/8782769
复制相似问题