为什么 strsplit 不能处理我的字符串?
Why is strsplit not working with my character string?
我想结合 R 的 rev() 函数和 strsplit 函数来检查字符串是否为回文。我的想法是使用 strsplit() 将我的字符串拆分为单个字母,然后对结果使用 rev 来反转字母的顺序。所以,说:
a = "summer"
我们这样做:
b = strsplit(a,"")
我们得到:
[[1]]
[1] "s" "u" "m" "m" "e" "r"
看起来应该可以。但是在此使用 rev:
rev(b)
并且输出没有改变:
[[1]]
[1] "s" "u" "m" "m" "e" "r"
现在,我已经缩小了与“[[1]]”有关的答案范围,我认为它是列表表示法。如果我们这样做:
c = strsplit(a,"")[[1]]
我们得到:
[1]“s”“u”“m”“m”“e”“r”
即没有'[[1]]'。现在,如果我们在这里使用 rev(c),我们会得到想要的结果:
[1] "r" "e" "m" "m" "u" "s"
类似地,如果我们有:
d = 1:10
并使用 rev(d),我们得到:
[1] 10 9 8 7 6 5 4 3 2 1
两次成功尝试的共同点是缺少列表符号。谁能告诉我 R 如何处理我们的初始字符串,以及为什么使用带有 strsplit 的列表表示法可以让我们正确使用 rev?
这里发生的事情是,当您调用 rev(b)
时,您正在反转一个 list,其中只有一个元素。那一个元素是一个字符向量。所以反向操作只是 returns 同样的事情:
b <- strsplit(a, "")
rev(b)
[[1]]
[1] "s" "u" "m" "m" "e" "r"
但是,当您访问该列表的第一个(也是唯一一个)元素时,您反转了字母向量:
rev(b[[1]])
[1] "r" "e" "m" "m" "u" "s"
如果你对一个包含多个元素的列表进行反转,你会看到元素反转:
lst <- list(a=c("v", "x"), b=c("y", "z"))
lst
$a
[1] "v" "x"
$b
[1] "y" "z"
rev(lst)
$b
[1] "y" "z"
$a
[1] "v" "x"
我想结合 R 的 rev() 函数和 strsplit 函数来检查字符串是否为回文。我的想法是使用 strsplit() 将我的字符串拆分为单个字母,然后对结果使用 rev 来反转字母的顺序。所以,说:
a = "summer"
我们这样做:
b = strsplit(a,"")
我们得到:
[[1]]
[1] "s" "u" "m" "m" "e" "r"
看起来应该可以。但是在此使用 rev:
rev(b)
并且输出没有改变:
[[1]]
[1] "s" "u" "m" "m" "e" "r"
现在,我已经缩小了与“[[1]]”有关的答案范围,我认为它是列表表示法。如果我们这样做:
c = strsplit(a,"")[[1]]
我们得到:
[1]“s”“u”“m”“m”“e”“r”
即没有'[[1]]'。现在,如果我们在这里使用 rev(c),我们会得到想要的结果:
[1] "r" "e" "m" "m" "u" "s"
类似地,如果我们有:
d = 1:10
并使用 rev(d),我们得到:
[1] 10 9 8 7 6 5 4 3 2 1
两次成功尝试的共同点是缺少列表符号。谁能告诉我 R 如何处理我们的初始字符串,以及为什么使用带有 strsplit 的列表表示法可以让我们正确使用 rev?
这里发生的事情是,当您调用 rev(b)
时,您正在反转一个 list,其中只有一个元素。那一个元素是一个字符向量。所以反向操作只是 returns 同样的事情:
b <- strsplit(a, "")
rev(b)
[[1]]
[1] "s" "u" "m" "m" "e" "r"
但是,当您访问该列表的第一个(也是唯一一个)元素时,您反转了字母向量:
rev(b[[1]])
[1] "r" "e" "m" "m" "u" "s"
如果你对一个包含多个元素的列表进行反转,你会看到元素反转:
lst <- list(a=c("v", "x"), b=c("y", "z"))
lst
$a
[1] "v" "x"
$b
[1] "y" "z"
rev(lst)
$b
[1] "y" "z"
$a
[1] "v" "x"