3

Rを使い始めたばかりなので、お手柔らかにお願いします…

現在、Linux サーバーで SAR によって収集されたディスク パフォーマンス データを視覚化しようとしています。CSV データのヘッダーは次のようになります。

timestamp; DEV; tps; rd_sec/s; wr_sec/s; avgrq-sz; avgqu-sz; await, svctm; %util

DEV は、データをグループ化するために使用するデバイス名を表します。

disks <- split(x = dkstbl, f = dsktbl[, "DEV"])

RStudio とマニピュレート ライブラリを使用して、次のプロットを描画します。

manipulate(
  plot(disks[disk][[1]]$tps[time], 
       disks[disk][[1]]$await[time], 
       xlim = c(0,max(disks[disk][[1]]['tps'])), 
       ylim = c(0,max(disks[disk][[1]]['await'])),
       main = paste(disk,disks[disk][[1]]$X00.00.01[time]),
       xlab = 'IOPS',
       ylab = 'AWAIT'
       ), 
  time = slider(1, 1000),
  disk = picker(as.list(names(disks)))
)

それはほとんど私が望んでいることですが、それでも正確ではありません。私が欲しいのは、1つのプロットにすべてのディスクのデータを含める必要があり、おそらく次のようになります。

manipulate(
  plot(disks[*][[1]]$tps[time], 
       disks[*][[1]]$await[time], 
       xlim = c(0,max(disks[*][[1]]['tps'])), 
       ylim = c(0,max(disks[*][[1]]['await'])),
       main = paste(disks[*][[1]]$X00.00.01[time]),
       xlab = 'IOPS',
       ylab = 'AWAIT'
       ), 
  time = slider(1, 1000)
)

...すべてのディスクを一度にプロットするには、アスタリスク (*) を機能するものに置き換える必要があります。どうすればそれを達成できますか?

ありがとう、乾杯、 ダニエル

4

1 に答える 1

1

まず、最初に元の data.frame を分割する理由がわかりません。

2 番目に、私の理解が正しければ、ある特定の時点について、すべてのディスクからの観測結果を表示したいということですね。

したがって、次の方法で問題が解決すると思います。

disk <- do.call("rbind", disks)
manipulate(
  plot(disk$tps[disk$Time==time],
     disk$await[disk$Time==time],
     xlim = c(0,max(disk$tps)),
     ylim = c(0,max(disk$await)),
     main = "All disks",
     xlab = 'IOPS',
     ylab = 'AWAIT'
  ),
  time = picker(as.list(levels(disk$Time)))
)

物事をシンプルに保つように努めるべきです...

于 2012-12-19T20:20:28.890 に答える