我注意到了这个意外的功能:
foo <- list(whatever=1:10)
Run Code Online (Sandbox Code Playgroud)
现在,以下工作原理:
foo$wha
foo$w
foo$whateve
Run Code Online (Sandbox Code Playgroud)
但是,以下内容不是:
foo[["wha"]]
Run Code Online (Sandbox Code Playgroud)
这会产生意想不到的后果(对我而言是意料之外的),如果您有两个潜在的名称,例如" CXCL1 "和" CXCL11 ",并且您想通过检查知道CXCL1是否为空!is.null(foo$CXCL1),则即使CXCL1也会返回TRUE null,但CXCL11不是.
我的问题是:
foo$whatever和之间有什么区别foo[["whatever"]]?部分匹配仅适用于列表名称的唯一初始子序列。因此,例如:
> l <- list(score=1, scotch=2)
> l$core #only INITIAL subsequences
NULL
> l$sco #only UNIQUE subsequences
NULL
> l$scor
[1] 1
Run Code Online (Sandbox Code Playgroud)和[[选择$列表中的单个元素。主要区别在于$不允许计算索引,而[[允许,并且默认情况下允许使用运算符进行部分匹配,$但不允许使用[[。
这些Extract 或 Replacement运算符来自 S,尽管 R 限制了部分匹配的使用,而 S 在大多数运算符中默认使用部分匹配。
在您的示例中,如果CXCL1和CXCL11共存并且您索引foo$CXCL1,那么这不是部分匹配,应该返回CXCL1的值。如果没有,也许还有另一个问题。
我应该指出,[[从版本开始,默认不允许部分匹配R 2.7.0。