You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:24:31