1

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コンソールを模倣します。よろしくお願いします

4

2 に答える 2

2

等幅フォントを使用していることを確認してください。そうしないと、物事を調整するのが非常に困難になります。モノスペースフォントでは、各文字が同じ量のスペースを占めます。

# Instead of
insert(gt3, str.split[[i]])
# Try this
insert(gt3, str.split[[i]], font.attr = c(family="monospace"))
于 2012-01-09T01:16:31.170 に答える
2

gWidgetsでright-align/center/etcの意味でテキストを整列させる方法はありません。

@Dasonが提案したように、等幅フォントをお勧めします(ただし、これがデフォルトのようです)。

コードに関しては、少しクリーンアップできます。

  • str.splitの作成にループは必要ありません(何も依存せず、毎回上書き 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)

(2つを並べて比較します。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-09T01:36:58.060 に答える