这个语法技巧的名称是什么?它在哪里记录?

Bry*_*son 5 syntax r

以前没碰过这个.从pairs.panels包中的帮助页面psych,可以找到以下内容:

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

我想问一下这个参数,它设置了为数据点绘制的圆的背景颜色: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的基础上的.

Ari*_*man 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
Run Code Online (Sandbox Code Playgroud)

使用重复元素进行索引

在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"
Run Code Online (Sandbox Code Playgroud)

这通常在更换采样时被利用.

这记录在哪里?

在各种各样的地方,虽然并不总是强调它有多酷.

例如,在第11页,WN Venables,DM Smith和R Development Core Team.关于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.
Run Code Online (Sandbox Code Playgroud)

  • ?"索引的因素是允许的,相当于索引由数字代码(见因子),而不是由被打印的字符的值(对于使用[as.character(ⅰ:由因子索引在`Extract`提到)])" (2认同)