作为参数传递给应用函数的带引号的方括号的确切含义是什么?
What is the precise meaning of the quoted square bracket passed as a parameter to apply functions?
在编程语言 R 中,
的确切含义是什么
'['
在以下代码部分用作 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))
dd$C
[1] X1=7;X2=8;X3=9 X1;; X1=13;X2=14
Levels: X1;; X1=13;X2=14 X1=7;X2=8;X3=9
@Henrik 两个答案的答案是一样的但是问题是不一样的。这个被标记为重复的问题 (Using '[' square bracket as a function for lapply in R ) 预先假定一个知识 [ 是一个对我们 R 新手来说不是不言自明的函数。
[
是一个函数。
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
函数,它们与函数 [
和 [[
相同,但对某些人来说可能更具可读性(并且可以在没有引号的情况下使用它们)。
[<-
和 [[<-
也是函数,在分配给 vector
/matrix
/data.frame
/[= 的元素时使用25=] 并且在 magrittr
中有别名 inset
和 inset2
很确定这是重复的。无论哪种方式,它都充当子集函数。即:
a <- list(c(2,5),c(24,4),c(15,3))
lapply(a,'[',2)
将return包含5
、4
和3
的列表。
它指的是您将使用两个括号执行的索引操作背后的函数:例如 x[3]
实际上只是一个函数调用 "["(x, 3)
。
[
是一个函数。在下面的示例中,它与两个参数一起使用。
L <- list(a = 1:4, b = 1:3)
sapply(L, `[`, 2)
## a b
## 2 2
上面的 sapply
与以下任何一个相同:
sapply(L, function(x) `[`(x, 2))
sapply(L, function(x) x[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`
在编程语言 R 中,
的确切含义是什么'['
在以下代码部分用作 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))
dd$C [1] X1=7;X2=8;X3=9 X1;; X1=13;X2=14
Levels: X1;; X1=13;X2=14 X1=7;X2=8;X3=9
@Henrik 两个答案的答案是一样的但是问题是不一样的。这个被标记为重复的问题 (Using '[' square bracket as a function for lapply in R ) 预先假定一个知识 [ 是一个对我们 R 新手来说不是不言自明的函数。
[
是一个函数。
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
函数,它们与函数 [
和 [[
相同,但对某些人来说可能更具可读性(并且可以在没有引号的情况下使用它们)。
[<-
和 [[<-
也是函数,在分配给 vector
/matrix
/data.frame
/[= 的元素时使用25=] 并且在 magrittr
inset
和 inset2
很确定这是重复的。无论哪种方式,它都充当子集函数。即:
a <- list(c(2,5),c(24,4),c(15,3))
lapply(a,'[',2)
将return包含5
、4
和3
的列表。
它指的是您将使用两个括号执行的索引操作背后的函数:例如 x[3]
实际上只是一个函数调用 "["(x, 3)
。
[
是一个函数。在下面的示例中,它与两个参数一起使用。
L <- list(a = 1:4, b = 1:3)
sapply(L, `[`, 2)
## a b
## 2 2
上面的 sapply
与以下任何一个相同:
sapply(L, function(x) `[`(x, 2))
sapply(L, function(x) x[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`