首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: gwidgets: gtext:对齐文本

R: gwidgets: gtext:对齐文本
EN

Stack Overflow用户
提问于 2012-01-09 08:34:09
回答 2查看 921关注 0票数 1

我想问一下,当我们在gtext中输入文本后,是否有一种方法可以对齐文本。例如

代码语言:javascript
复制
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控制台了。非常感谢,在此之前

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-09 09:36:58

在gWidgets中,无法以右对齐/居中/等方式对齐文本。

我推荐@Dason建议的等宽字体(尽管这似乎是我的默认设置)。

就您的代码而言,您可以稍微清理一下:

  • 你在创建str.split时不需要循环(不依赖于i,你每次都会重写str.split )
  • 你可以消除用来放入str.split[[i]]
  • You中的制表符的循环不需要单独添加str.split的每一行,你可以一次完成所有的操作。

总而言之:

代码语言:javascript
复制
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)之后的所有内容替换为:

代码语言:javascript
复制
insert(gt3,df.co)

(并排执行这两个操作并进行比较:insert(gt3,df.co)将右对齐数据帧的每一列,正如键入df将显示的那样;您拥有的方法(insert(gt3,str.joined))将左对齐每一列。

代码语言:javascript
复制
# 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
票数 2
EN

Stack Overflow用户

发布于 2012-01-09 09:16:31

请确保使用等宽字体。如果你不这样做,那么就很难对齐。等宽字体使每个字符占用相同的空间量。

代码语言:javascript
复制
# Instead of
insert(gt3, str.split[[i]])
# Try this
insert(gt3, str.split[[i]], font.attr = c(family="monospace"))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8782769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档