62

テキストと同じように数式を操作するのに問題があります。私がやろうとしているのは、数式をグラフのタイトルに連結することです。ただし、テキストと同じように数式を操作しようとすると、失敗します。

model <- lm(celkem ~ rok + mesic)
formula(model)
# celkem ~ rok + mesic

これで結構です。今、私は次のような文字列を作成したいと思います"my text celkem ~ rok + mesic"-これが問題の原因です:

paste("my text", formula(model))
# [1] "my text ~"           "my text celkem"      "my text rok + mesic"

paste("my text", as.character(formula(model)))
# [1] "my text ~"           "my text celkem"      "my text rok + mesic"

paste("my text", toString(formula(model)))
# [1] "my text ~, celkem, rok + mesic"

sprint、パッケージgtoolsに関数があるのがわかりますが、これは非常に基本的なことなので、デフォルトの環境内で解決する価値があると思います!!

4

10 に答える 10

47

formula.tools関数としてのパッケージからの短い解決策as.character.formula

frm <- celkem ~ rok + mesic
Reduce(paste, deparse(frm))
# [1] "celkem ~ rok + mesic"

library(formula.tools)
as.character(frm)
# [1] "celkem ~ rok + mesic"

Reduce長い数式の場合に役立つ場合があります。

frm <- formula(paste("y ~ ", paste0("x", 1:12, collapse = " + ")))

deparse(frm)
# [1] "y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + "
# [2] "    x12"                                                      
Reduce(paste, deparse(frm))
# [1] "y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 +      x12"

これはwidth.cutoff = 60Linによるもの?deparseです。

于 2013-02-03T10:04:17.443 に答える
33

試してくださいformat

paste("my text", format(frm))
## [1] "my text celkem ~ rok + mesic"
于 2013-02-03T14:17:11.733 に答える
16

すべてをカバーする最も簡単なソリューション:

f <- formula(model)
paste(deparse(f, width.cutoff = 500), collapse="")
于 2013-02-03T09:58:27.777 に答える
12

またはジュリアスのバージョンの代替として(注:コードは自己完結型ではありませんでした)

celkem = 1
rok = 1
mesic = 1
model <- lm(celkem ~ rok + mesic)
paste("my model ", deparse(formula(model)))
于 2013-02-03T10:06:27.407 に答える
2

ここで を使用するソリューションはprint.formula、トリックのように見えますが、1 行でジョブを実行し、使用を避け、deparse余分なパッケージを使用する必要はありません。を使用して、印刷式の出力をキャプチャするだけですcapture.output

paste("my text",capture.output(print(formula(celkem ~ rok + mesic))))
[1] "my text celkem ~ rok + mesic"

長い数式の場合:

 ff <- formula(paste("y ~ ", paste0("x", 1:12, collapse = " + ")))
 paste("my text",paste(capture.output(print(ff)), collapse= ' '))

 "my text y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 +      x12"
于 2013-02-03T12:05:32.497 に答える
1

次に gsub を追加して空白を削除します

gsub("  ", "", paste(format(frm), collapse = ""))
于 2015-07-01T05:35:15.647 に答える