r - 优化这个 for 循环(字母到数字)函数的最佳方法是什么?

标签 r for-loop optimization letter

我有一个经过清理的字母输入流,我想将其转换为 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/

相关文章:

r - 如何使用ggplot2将 Axis 标签保留在一侧, Axis 标题保留在另一侧

r - 如何更改点阵中的点大小?

iphone - 如何比较两个NSMutableArray?

c - "Segmentation fault 11"for 循环崩溃

ios - Swift 过滤数组元素

数字列上的 MySQL 索引使查询变慢

c - 循环优化 - 返工

r - 在一行中搜索 r 中的一系列值

r - 绘制效果的标准误差

java - Jav8 : Computing Elapsed time for Timestamp