gpt4 book ai didi

r - R 图中的命名字符向量和 par()

转载 作者:行者123 更新时间:2023-12-01 01:14:16 24 4
gpt4 key购买 nike

我正在尝试使用命名字符向量来保存自定义调色板,所以我可以说,例如调色板['red'] 而不是到处重复“#dc322f”。

但是,我似乎无法使用该向量的元素作为 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 相当陌生,似乎我可能遗漏了一些基本的东西。知道这里发生了什么吗?

最佳答案

使用 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'])

enter image description here

至于为什么?

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,则不会)

关于r - R 图中的命名字符向量和 par(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12964720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com