在 R 的 strplit() 函数中:添加索引值有什么区别?



我正在学习R,下面的代码来自一个练习,其中的目标是编写计算rquote中第一个u之前的R数的代码。

rquote <- "r's internals are irrefutably intriguing"
chars <- strsplit(rquote, split = "")[[1]]
# Initialize rcount
rcount <- 0
# Finish the for loop
for (char in chars) {
if (char == "r"){
rcount = rcount + 1
}
if (char == "u"){
break
}

}
# Print out rcount
print(rcount)

我的问题是:在strsplit()的末尾添加[[1]]有什么区别?以及为什么CCD_ 4循环在第一个"0"之后停止;r〃;在排除[[1]]时遇到?

我理解[[1]]对于for循环按预期工作是必要的;然而,无论我是否添加[[1]]chars都是相同的,即:

chars <- strsplit(rquote, split = "")[[1]]&chars <- strsplit(rquote, split = "")两种产量:

>chars
[1] "r" "'" "s" " " "i" "n" "t" "e" "r" "n" "a" "l" "s" " " "a" "r" "e" " " "i"
[20] "r" "r" "e" "f" "u" "t" "a" "b" "l" "y" " " "i" "n" "t" "r" "i" "g" "u" "i"
[39] "n" "g"

chars在使用或不使用[[1]]时会有所不同。

当您使用[[1]]:时

chars1 <- strsplit(rquote, split = "")[[1]]
chars1
# [1] "r" "'" "s" " " "i" "n" "t" "e" "r" "n" "a" "l" "s" " " "a" "r" "e" " " "i" "r" "r" "e"
#[23] "f" "u" "t" "a" "b" "l" "y" " " "i" "n" "t" "r" "i" "g" "u" "i" "n" "g"
length(chars1)
#[1] 40
class(chars1)
#[1] "character"

不使用[[1]]:时

chars2 <- strsplit(rquote, split = "")
chars2
#[[1]] <- Don't forget this [[1]], it is important
# [1] "r" "'" "s" " " "i" "n" "t" "e" "r" "n" "a" "l" "s" " " "a" "r" "e" " " "i" "r" "r" "e"
#[23] "f" "u" "t" "a" "b" "l" "y" " " "i" "n" "t" "r" "i" "g" "u" "i" "n" "g"
length(chars2)
#[1] 1
class(chars2)
#[1] "list"

CCD_ 16返回一个列表,因此添加CCD_。当你对任何对象进行迭代时,你对它的长度进行迭代,在chars1的情况下,它的长度是40,而在chars2的情况下是1。

最新更新