R 引用方括号作为应用函数的参数传递的确切含义是什么?

R 引用方括号作为应用函数的参数传递的确切含义是什么?,r,syntax,lapply,sapply,R,Syntax,Lapply,Sapply,在编程语言R中,确切地说,什么是 '[' 在代码的以下部分中用作sappy()和lappy()的参数: dd <- data.frame( A = c(1L, 2L, 3L), B = c(4L, 5L, 6L), C = c("X1=7;X2=8;X3=9", "X1=13;X2=14", "X1=5;X2=1;X3=8") ) namev <- function(x) { a <- strspli

在编程语言R中,确切地说,什么是

'['
在代码的以下部分中用作sappy()和lappy()的参数:

dd <- data.frame(
    A = c(1L, 2L, 3L), 
    B = c(4L, 5L, 6L), 
    C = c("X1=7;X2=8;X3=9",
          "X1=13;X2=14",
          "X1=5;X2=1;X3=8")
)
namev <- function(x) {
    a <- strsplit(x,"=")
    setNames(sapply(a,'[',2), sapply(a,'[',1))
}

vv <- lapply(strsplit(as.character(dd$C),";"), namev)

nm <- unique(unlist(sapply(vv, names)))

#extract data from all rows for every column
nv <- do.call(rbind, lapply(vv, '[', nm))

dd
[
是一个函数

iris[1,2]
相当于
'['(iris,1,2)

由于它不是一个语法上有效的名称,因此需要以这种方式引用它(请参见
?make.names

不过,您可以引用任何函数:

'head'(iris)

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
仅供参考,
magrittr
软件包包括
extract
extract2
函数,这些函数与
[
[
函数相同,但可能对某些函数更具可读性(并且可以不使用引号)


[非常确定这是一个重复项。无论哪种方式,它都作为一个子集函数发挥作用。例如:

a <- list(c(2,5),c(24,4),c(15,3))
lapply(a,'[',2)

a它指的是您将使用两个括号执行的索引操作背后的函数:
x[3]
例如,它实际上只是一个函数调用
“[(x,3)
[
是一个函数。在下面的示例中,它与两个参数一起使用

L <- list(a = 1:4, b = 1:3)

sapply(L, `[`, 2)
## a b 
## 2 2 
它是R中的一个基本函数,其R源代码如下,即,它与底层C代码关联

`[`
## .Primitive("[")
可以为它编写S3方法。例如,这些方法在vanilla R中可用

> methods("[")
 [1] [,nonStructure-method [.acf*                [.AsIs               
 [4] [.bibentry*           [.data.frame          [.Date               
 [7] [.difftime            [.Dlist               [.factor             
[10] [.formula*            [.getAnywhere*        [.hexmode            
[13] [.listof              [.noquote             [.numeric_version    
[16] [.octmode             [.pdf_doc*            [.person*            
[19] [.POSIXct             [.POSIXlt             [.raster*            
[22] [.roman*              [.SavedPlots*         [.simple.list        
[25] [.table               [.terms*              [.ts*                
[28] [.tskernel*           [.warnings           
see '?methods' for accessing help and source code
例如,请尝试以下操作以查看这些方法的R源代码:

`[.data.frame`

`[.Date`

你能提供一个简单的例子说明dd$C是什么样子吗?除了答案之外,你还可以通过键入
[
来访问函数的文档['
虽然要完全理解其中讨论的所有细微差别需要一些时间。是的,我尝试了帮助。它未能澄清上述示例中发生了什么,但最有趣的是,特别是考虑到下面答案中的解释。
`[.data.frame`

`[.Date`