4

名前付き文字ベクトルを使用してカスタム カラー パレットを保持しようとしているので、"#dc322f" をあちこちで繰り返す代わりに、たとえば、palette['red'] と言うことができます。

ただし、そのベクトルの要素を引数として使用できないようですpar()(ただし、他の場所で使用できます)。

例を次に示します。緑の点でグラフを作成しますが、par() 呼び出しは失敗し、背景は白です。呼び出し内からパレット ベクトルを使用してパラメーターを設定できることに注意してください。plot()

> palette <- c('#002b36','#dc322f','#859900')
> names(palette) <- c('black','red','green')
> par(bg=palette['red'])                                                                                                                                
Warning message:
In par(bg = palette["red"]) : "bg.red" is not a graphical parameter
> plot(1:10,1:10,col=palette['green'])
> # (White graph with green dots appears) 

ただし、名前付き数値ベクトルを使用すると、次のように機能します。

> palette <- 1:3                                                                                                                                          
> names(palette) <- c('black','red','green')                                                                                                              
> par(bg=palette['red'])                                                                                                                             
> # (no error here -- it worked.)
> plot(1:10,1:10,col=palette['green'])
> # (Red graph with green dots appears)

私はRにかなり慣れていないので、基本的な何かが欠けているようです。ここで何が起こっているか分かりますか?

4

1 に答える 1

4

を使用unnameして、渡されるアイテムがpar名前付き要素ではなく、色を定義する単なる文字ベクトルになるようにします

palette <- c('#002b36','#dc322f','#859900')
names(palette) <- c('black','red','green')
par(bg=unname(palette['red'])) 
plot(1:10,1:10,col=palette['green'])

ここに画像の説明を入力

なぜですか?

parで、すべての引数が文字ベクトルの場合、

if (all(unlist(lapply(args, is.character)))) 
            args <- as.list(unlist(args))

as.list(unlist(args))args が名前付き文字ベクトルである場合の方法は次のとおりです。

args <- list(bg = palette['red'])
as.list(unlist(args))
$bg.red
[1] "#dc322f"

bg.redあり、有効な ではありませんpar

行が次のようなものである場合

setNames(as.list(unlist(args, use.names = F)), names(args))

その後、場合によっては機能する可能性があります (ただし、名前付き要素のいずれかのarg長さが 1 より大きい場合は機能しません) 。

于 2012-10-18T22:31:39.877 に答える