5

以前没遇到过这种情况。从pairs.panelsin package的帮助页面中psych,可以找到以下内容:

data(iris)
pairs.panels(iris[1:4],bg=c("red","yellow","blue")[iris$Species],pch=21)

我想问一下这个论点,它设置了为数据点绘制的圆圈的背景颜色:bg=c("red","yellow","blue")[iris$Species]显然,这个论点将 的 3 个级别(iris$Species一个因子)与给定的 3 种颜色相关联。我不是在问它的作用。

我想知道这种将传递的参数与动态数据级别相关联的方法是什么,以及它在哪里记录?好像有R什么魔力。如果我正在编写这个函数,我可能会分别传递因子的颜色和列名,然后在幕后手动进行关联。这个技巧可能非常有用。但从表面[iris$Species]上看,数据似乎在为自己编制索引。例如,您不能[iris$Species]在控制台中输入,它只会给出错误。您可以输入c("red","yellow","blue")[iris$Species]并获得正确答案。似乎可能正在进行一些回收,但我不确定。我很好奇这是在哪里记录的,是否有人可以用一两句话解释发生了什么。例如,是[iris$Species]被转换为整数,然后用于索引 3 种颜色的列表?我想就是这样,但我想要另一种意见。

注意:相同的技巧用于graphics::pairs基于哪个panels.pairs

4

1 回答 1

7

这里有两件事:

  1. 该因子iris$Species被强制转换为数字/整数。
  2. 这些整数索引以通常的方式使用。

强迫

这很重要,因为在这种情况下因子标签不是红色/黄色/蓝色:

> all( c("red","yellow","blue")[iris$Species] == c("red","yellow","blue")[as.integer(iris$Species)] )
[1] TRUE
> all( c("red","yellow","blue")[iris$Species] == c("red","yellow","blue")[as.character(iris$Species)] )
[1] NA

使用重复元素进行索引

在 R 中,每当您索引一个简单向量时,重复的索引元素都会被重复包含。

> x <- letters[1:5]
> x
[1] "a" "b" "c" "d" "e"
> x[c(1,3)]
[1] "a" "c"
> x[c(1,3,3,3,3)]
[1] "a" "c" "c" "c" "c"

这通常在有放回抽样时被利用。

这是在哪里记录的?

在很多地方,虽然并不总是强调它有多酷。

例如,在第 11 页,WN Venables、DM Smith 和 R 开发核心团队。R 简介。 R 注释:数据分析和图形的编程环境。版本 2.5.0 (2007-04-23)。状态:

> x[1:10]
selects the first 10 elements of x (assuming length(x) is not less than 10). Also
> c("x","y")[rep(c(1,2,2,1), times=4)]
(an admittedly unlikely thing to do) produces a character vector of length 16 consisting of
"x", "y", "y", "x" repeated four times.
于 2013-07-23T18:14:53.970 回答