web-dev-qa-db-ja.com

file.info()のサイズ要素をバイトからKB、MB、GBなどにすばやく変換するにはどうすればよいですか?

私はstackoverflowでこれに対する答えがすでにあると思います、そして私は単にそれを見つけることができませんでした。

望ましい結果:file.info()呼び出しのファイルサイズ要素をバイトからKB、MBなどにすばやく変換します。問題ありません。出力がi)目的のサイズタイプの文字列(例:_"96 bytes"_)またはii)単純な数値変換(例:_60963_バイトから_60.963_ KB(per- Google )。

再現手順:

  1. ファイルを保存するフォルダーを作成します。

    _dir.create("census-app/data")
    _
  2. ファイルのダウンロード(〜60KB):

    _download.file("http://shiny.rstudio.com/tutorial/lesson5/census-app/data/counties.rds",
    "census-app/data/counties.rds")
    _
  3. file.info()$sizeを使用して、ファイルサイズをバイト単位で返します。

    _file.info("census-app//data//counties.rds")$size
    [1] 60963
    _

そこから、私は立ち往生しています。複雑な/手動の解析と計算を行って変換を行うことができることに気付きました( キロバイト、メガバイトなどをRのバイトに変換する を参照)。

ただし、単純に基底関数などを使用できることを望んでいます。

_    format(file.info("census-app//data//counties.rds")$size, units = "KB")
    [1] "60963"
    # Attempt to return file size in KB simply returns the size in bytes
    # NOTE: format(x, units = "KB") works fine when I
    # pass it object.size() for an object loaded in R
_
27
Daniel Fletcher

object.size()関数は、結果に対してこのタイプのフォーマットを行いますが、これは、渡すRオブジェクトのサイズを通知することを目的としています。任意の値を取るように設定されていません。

ただし、フォーマットロジックの一部を「盗む」ことはできます。あなたはそれを呼び出すことができます

utils:::format.object_size(60963, "auto")
# [1] "59.5 Kb"

このようにして、エクスポートされていないフォーマット関数を呼び出すことができます。 ?format.object_sizeヘルプページで追加のフォーマットオプションを表示できます。 1 Kb = 1024バイト(例のように1000ではない))というルールを使用していることに注意してください。

33
MrFlick

GdataパッケージのhumanReadable()関数を使用します。サイズをベース1000( 'SI')またはベース1024( 'IEC')単位で報告するオプションがあり、サイズのベクトル全体を同時に処理できるようにベクトル化されています。

例えば:

> humanReadable(c(60810, 124141, 124, 13412513), width=4)
[1] "60.8 kB" "124 kB"  "124 B"   "13.4 MB"
> humanReadable(c(60810, 124141, 124, 13412513), standard="IEC", width=4)
[1] "59.4 KiB" "121 KiB"  "124 B"    "12.8 MiB"

私は現在、gdataのリリース2.16.0の準備に取り組んでいます。これにより、サイズのレポートに使用するユニットと「Unix」スタイルのユニットを指定する機能が追加されます。

> humanReadable(c(60810, 124141, 124, 13412513), standard="SI", units="kB")
[1] "   60.8 kB" "  124.1 kB" "    0.1 kB" "13412.5 kB"
> humanReadable(c(60810, 124141, 124, 13412513), standard="IEC", units="KiB")
[1] "   59.4 KiB" "  121.2 KiB" "    0.1 KiB" "13098.2 KiB"
humanReadable(c(60810, 124141, 124, 13412513), standard="Unix", units="K")
[1] "   59.4 K" "  121.2 K" "    0.1 K" "13098.2 K"

-Greg [gdataパッケージのメンテナー]

更新

CRANは、standard="Unix"およびunits=オプションをサポートするgdataバージョン2.16.1を受け入れており、まもなくCRANミラーで利用可能になる予定です。

15