求助:编写R函数返回单词字母在letters向量中的位置
解决你的R函数问题:返回单词字母在letters中的位置
我来帮你梳理下代码里的问题,然后给你一个简洁高效的实现方案~
先看你现有代码的几个关键问题:
- strsplit参数搞反了:你写的
strsplit(chr, word)完全弄反了拆分对象和分隔符,应该是把输入的word拆成单个字符,正确写法是strsplit(word, ""),而且你没把拆分结果赋值给chr,导致chr一直是空向量。 - 循环条件错误:
while(i<length)里的length没有指定具体对象,应该是length(chr),但因为chr是空的,循环根本不会执行。 - 循环变量没更新:
i+1只是做了计算,但没把结果赋值给i(应该是i <- i+1),就算循环能跑也会陷入死循环。 - 逻辑绕远路了:其实不需要手动循环对比每个字母,R里有现成的函数可以直接完成匹配。
正确的实现函数
这里给你一个简洁且符合需求的版本:
letter_positions <- function(word) { # 将单词转为小写(兼容大写输入,不需要的话可以去掉tolower) lower_word <- tolower(word) # 把单词拆分为单个字符的向量 char_vector <- strsplit(lower_word, "")[[1]] # 匹配每个字符在letters中的位置 match(char_vector, letters) }
测试验证
- 输入
letter_positions("abba"),返回[1] 1 2 2 1,完全符合你的示例需求。 - 输入
letter_positions("hello"),返回[1] 8 5 12 12 15,正确对应h(8)、e(5)、l(12)、l(12)、o(15)的位置。
代码解释
tolower(word):确保不管输入是大写还是小写字母,都能正确匹配letters(因为letters是小写的26个英文字母)。strsplit(lower_word, "")[[1]]:strsplit返回的是列表,用[[1]]提取出里面的字符向量。match(char_vector, letters):这个函数会逐个查找char_vector里的元素在letters中的位置,正好是我们需要的结果。
内容的提问来源于stack exchange,提问作者likeliterallysoum
相关产品推荐
相关产品推荐

