我找到了这个代码:

string = c("G1:E001", "G2:E002", "G3:E003")
> sapply(strsplit(string, ":"), "[", 2)
[1] "E001" "E002" "E003"

显然 strsplit(string, ":") 返回大小为 3 的向量,其中每个分量 i 是大小为 2 的向量,其中包含 GiE00i

但是为什么另外两个参数 "[", 2 的作用是只选择那些 E00i 呢?据我所知,该函数接受的唯一参数是:
sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)

最佳答案

查看 ?sapply 的文档:

 sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)

 FUN: the function to be applied to each element of ‘X’: see
      ‘Details’.  In the case of functions like ‘+’, ‘%*%’, the
      function name must be backquoted or quoted.

 ...: optional arguments to ‘FUN’.

这就是你的答案。在您的情况下, FUN[ 。在您的情况下,“fun 的可选参数”为“2”,因为它在您的调用中与 ... 匹配。因此,在这种情况下,sapply 调用 [ 并将列表中的值作为第一个参数,将 2 作为第二个参数。考虑:
x <- c("G1", "E001")   # this is the result of `strsplit` on the first value

然后:
`[`(x, 2)      # equivalent to x[2]
# [1] "E001"

这就是 sapply 在您的示例中所做的,除了它适用于 strsplit 返回的每 2 个长度的字符向量。

关于r - sapply() 在 R 中使用 strsplit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31235165/

10-12 19:49