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

Big*_*LBL 4 syntax r lapply sapply

在编程语言R中,恰恰是什么意思

'['
Run Code Online (Sandbox Code Playgroud)

它在以下代码部分中充当sapply()和lapply()的参数:

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

dd $ C [1] X1 = 7; X2 = 8; X3 = 9 X1 ;; X1 = 13; X2 = 14
级:X1 ;; X1 = 13; X2 = 14 X1 = 7; X2 = 8; X3 = 9

@Henrik两个答案的答案是一样的,但问题是不同的.这个被标记为重复的问题(使用'['方括号作为R中lapply的函数)预先知道[对我们R新手来说这是一个不明显的函数.

G. *_*eck 5

[是一个功能.在下面的示例中,它使用两个参数.

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

sapply(L, `[`, 2)
## a b 
## 2 2 
Run Code Online (Sandbox Code Playgroud)

以上sapply是其中任何一个:

sapply(L, function(x) `[`(x, 2))

sapply(L, function(x) x[2])
Run Code Online (Sandbox Code Playgroud)

它是R中的原始函数,其R源是以下,即它支持底层C代码.

`[`
## .Primitive("[")
Run Code Online (Sandbox Code Playgroud)

可以为它编写S3方法.例如,这些方法可用于香草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
Run Code Online (Sandbox Code Playgroud)

例如,尝试以下操作以查看这些方法的R源代码:

`[.data.frame`

`[.Date`
Run Code Online (Sandbox Code Playgroud)