如何创建一个函数来提取向量中包含的字符串的最后 n 个字母

How to create a function that extracts the last n letters of strings contained in a vector

我开始在 R 中编程,我必须创建一个 final 函数来接收一个向量 v 的字符串和一个整数 n,以及 [=41] =] 与 v 长度相同的另一个向量,在每个位置包含一个字符串,其中只有原始字符串的最后 n 个字母。

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

不能使用循环或应用/lapply。

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

我试过这样做:

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

但它 returns 对我来说:

> 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'))

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

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 创建