如何从字母和字母自动构造“A”=“a”、“B”=“b”等形式的表达式?
我最近读的解决方案,以在R4DS锻炼。它包括以下代码:
library(stringr)
replacements <- c("A" = "a", "B" = "b", "C" = "c", "D" = "d", "E" = "e",
"F" = "f", "G" = "g", "H" = "h", "I" = "i", "J" = "j",
"K" = "k", "L" = "l", "M" = "m", "N" = "n", "O" = "o",
"P" = "p", "Q" = "q", "R" = "r", "S" = "s", "T" = "t",
"U" = "u", "V" = "v", "W" = "w", "X" = "x", "Y" = "y",
"Z" = "z")
lower_words <- str_replace_all(words, pattern = replacements)
head(lower_words)
我发现replacements载体的构建特别令人反感。没有人应该做那么多打字,特别是考虑到 R 有向量letters和LETTERS内置。
有没有办法自动构造这样的向量?我尝试使用表达式对象来创建它,但我发现我们甚至无法运行代码,quote("A" = "a")因为"A" = "a"它不是语法上有效的表达式。我也尝试使用字符串来创建它,例如使用 的一些技巧paste,但那些没有用,因为我们需要等号不是字符串。我最接近的猜测是substitute(c(a=b), list(a=LETTERS, b=letters)),但输出显然不正确。
回答
与letters/LETTERS, 使用
replacements <- setNames(letters, LETTERS)