以前没有遇到过。从pairs.panels软件包中psych的帮助页面中,可以找到以下内容:

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

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

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

注意:graphics::pairs所基于的panels.pairs中使用了相同的技巧。

最佳答案

这里有两件事:

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

  • 强制

    这很重要,因为在这种情况下,因子标签不是红色/黄色/蓝色:
    > 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页上,W。N. Venables,D.M。Smith和R Development Core Team。 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.
    

    关于r - 该语法技巧的名称是什么?在哪里记录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17817830/

    10-11 22:43