我有一个经过清理的字母输入流,我想将其转换为 1 到 27 之间的数字向量(所有字母包括空格)。我无法想象嵌套 for 循环是执行此操作的最佳方法。没有循环可以吗?
space_letters = append(letters, " ")
text_to_numbers = function (input_stream) {
input_stream = unlist(strsplit(input_stream, split = ""))
for(i in 1:length(input_stream)) {
for(j in 1:length(space_letters) {
if(input_stream[i] == space_letters[j]) {
input_stream[i] = j
}
}
}
return(as.integer(input_stream))
}
最佳答案
这是使用 match
的基本 R 替代方案
text_to_numbers <- function(ss)
as.numeric(sapply(strsplit(ss, ""), function(x) match(x, c(letters, " "))))
text_to_numbers("abcdef")
#[1] 1 2 3 4 5 6
text_to_numbers("the cat")
#[1] 20 8 5 27 3 1 20
或者 purrr
/stringr
等效项:
library(tidyverse)
text_to_numbers <- function(ss)
map_int(str_split(ss, "", simplify = T), ~match(.x, c(letters, " ")))
关于r - 优化这个 for 循环(字母到数字)函数的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52600247/