【问题标题】:How to create a function that extracts the last n letters of strings contained in a vector如何创建一个函数来提取向量中包含的字符串的最后 n 个字母
【发布时间】:2021-12-26 22:25:02
【问题描述】:

我开始在 R 中编程,我必须创建一个final 函数,它接收字符串的向量 v 和整数n,并返回另一个与 v 长度相同的向量在每个位置都包含一个字符串,其中仅包含原始字符串的n 最后一个字母。

此外,我必须使用函数substr (ch, start_pos, end_pos) 以及返回字符串长度(字母数)的nchar 函数。将其应用于下面定义的向量test,通过提取每个单词的最后3个字母来检查其操作,并将结果保存在变量 final.test中。没有必要考虑字符串本身小于我们要取的最终字母数的情况。

不能使用循环或 sapply / lapply。

也就是说,我必须创建一个函数,当引入向量时,例如 c ("Hola", "que", "tal"),如果我们返回 "la", "ue", "al"放入该向量,我们给 n 值 2(从末尾开始计数,在 n 处停止并提取)。

我尝试过这样做:

finales <- function(v, n){
  substr = substr(v, nchar(v[1:n]), n)
  return(substr)
}

但它会返回给我:

> finales(prueba,3)
[1] ""   "s"  "n"  ""   "e"  "ad" ""   "ar"

这不是我正在寻找的,但我不知道如何确定从向量的每个元素的末尾到我们将在函数中引入的数字 (n) 之间的计数。

函数必须通过这些测试:

prueba = c("Esto", "es", "un", "vector", "de", "cadenas", "de", "caracteres")
length(finales(prueba, 3)) == length(prueba)
all(finales(prueba, 3) == c('sto', 'es', 'un','tor','de','nas','de','res'))

如果你能帮助我,我将不胜感激

【问题讨论】:

    标签: r substring


    【解决方案1】:

    substr 是矢量化的,因此您可以:

    final <- function(v, n) substr(v, nchar(v) - (n - 1), nchar(v))
    

    所以,例如:

    final(prueba, 1)
    #> [1] "o" "s" "n" "r" "e" "s" "e" "s"
    
    final(prueba, 2)
    #> [1] "to" "es" "un" "or" "de" "as" "de" "es"
    
    final(prueba, 3)
    #> [1] "sto" "es"  "un"  "tor" "de"  "nas" "de"  "res"
    

    reprex package (v2.0.0) 于 2021 年 11 月 15 日创建

    【讨论】:

      猜你喜欢
      • 2011-02-17
      • 1970-01-01
      • 2013-03-31
      • 2015-07-04
      • 1970-01-01
      • 2017-12-28
      • 2012-07-11
      • 1970-01-01
      • 2010-12-15
      相关资源
      最近更新 更多