10

SendMailR でデータフレームを送信しようとしています。適切な形式で添付ファイルとして送信できます。ただし、メールの本文でデータフレームを送信したいと思います。私はcapture.output、print、sprintfを試しましたが、フォーマットを近づけることさえできません。

たとえば、次の構文を試しました

for (i in 1:nrow(df)){
 MSG = c(MSG,rownames(df)[1],as.character(unlist(df[i,])),'\n')
} 
MSG = sprintf('%-10s',MSG)
sendmail(from,to,subject,msg = list(MSG,attachment1,attachment2 ... ))

つまり、データフレームを /n や sprintf('s-10%') などでフォーマット変換して MSG に格納する必要があるのではないかと考えています。誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

18

で HTML メールを送信するのは簡単でsendmailRはありませんが、昨年のパッケージ作成者とのメールの議論に基づいて可能です (Olaf Mersmann の親切な助けに感謝します) - 単純にContent-Typeヘッダーをオーバーライドするだけです。例えば:

msg <- mime_part('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>HTML demo</title>
  <style type="text/css">
  </style>
</head>
<body>
<h1>HTML demo</h1>
</body>
</html>')

## Override content type.
msg[["headers"]][["Content-Type"]] <- "text/html"

from    <- '<foo@example.com>'
to      <- "<bar@example.com>"
subject <- "HTML test"
body    <- list(msg)
sendmail(from, to, subject, body, ...)

一方、HTML で表や人間が読める形式で表示する必要はありません。data.frameたとえば、 Rオブジェクトをマークダウンにできるasciiパッケージまたは私のpanderpkgがあります。クイックデモ:

> library(pander)
> panderOptions('table.split.table', Inf)
> pander(head(iris, 3))

-------------------------------------------------------------------
 Sepal.Length   Sepal.Width   Petal.Length   Petal.Width   Species 
-------------- ------------- -------------- ------------- ---------
     5.1            3.5           1.4            0.2       setosa  

     4.9             3            1.4            0.2       setosa  

     4.7            3.2           1.3            0.2       setosa  
-------------------------------------------------------------------

> pander(head(iris, 3), style = 'grid')


+----------------+---------------+----------------+---------------+-----------+
|  Sepal.Length  |  Sepal.Width  |  Petal.Length  |  Petal.Width  |  Species  |
+================+===============+================+===============+===========+
|      5.1       |      3.5      |      1.4       |      0.2      |  setosa   |
+----------------+---------------+----------------+---------------+-----------+
|      4.9       |       3       |      1.4       |      0.2      |  setosa   |
+----------------+---------------+----------------+---------------+-----------+
|      4.7       |      3.2      |      1.3       |      0.2      |  setosa   |
+----------------+---------------+----------------+---------------+-----------+

これを電子メール本文に連結したい場合はpander.return、コンソールに書き込む代わりに文字ベクトルを返します。また、他にも利用可能なテーブルがいくつかあります。たとえば、小数点記号、日付形式などを設定styleするのに役立つものもあります: http://rapporter.github.io/pander/panderOptions

于 2014-02-21T09:40:40.700 に答える
8

ライブラリ「xtable」は、データ フレームをテーブルとしてメールに添付するのに役立ちます。これを試して

   library(xtable)

   body=print(xtable(dataframe,caption = "Heading for the table"), type="html", caption.placement = "top")
于 2016-08-21T19:13:46.957 に答える