究竟是什么与#39; ['做?

时间:2015-08-24 21:46:09

标签: r string split

我在R中浏览了一些关于strsplit的答案。示例文字:

fileName <- c("hello.w-rp-al",
              "how.nez-r",
              "do.qs-sdz",
              "you.d-aerd",
              "do.dse-e")

我想获得创建列表的第一个元素,并认为我可以使用诸如

之类的东西
fileNameSplit <- strsplit(fileName, "[.]")
node_1 <- fileNameSplit[0]
node_2 <- fileNameSplit[1]

但那不起作用。

然后我发现this answer建议将sapply[一起使用。这确实有效。

d <- data.frame(fileName)
fileNameSplit <- strsplit(d$fileName, "[.]")
d$node_1 <- sapply(fileNameSplit, "[", 1)
d$node_2 <- sapply(fileNameSplit, "[", 2)

但是,我试图找出为什么。究竟发生了什么,以及[与任何事情有什么关系?在我看来,它在语义上令人困惑。

1 个答案:

答案 0 :(得分:12)

sapply对列表进行操作,列表是每个元素可以采用任何形式的向量。

fileNameSplit列表的特殊情况下,我们知道列表的每个元素都是带有两个元素的字符向量。

> fileNameSplit 
[[1]]
[1] "hello"   "w-rp-al"

[[2]]
[1] "how"   "nez-r"

[[3]]
[1] "do"     "qs-sdz"

[[4]]
[1] "you"    "d-aerd"

[[5]]
[1] "do"    "dse-e"

要从每个这些字符向量中提取第一个元素,我们必须迭代列表,这就是

sapply(fileNameSplit, `[`, 1)

一样。写作

时可能更清楚
sapply(fileNameSplit, function(x) x[1])

?`[`?sapply处的文档解释了较短版本的原因。

我们使用1,因为这是R中索引开始的地方(与其他从0开始的语言不同)。