该论点的要点如下:
我编写的函数考虑了一个参数,一个字母数字字符串,应该输出一个字符串,在该字符串中,此字母数字字符串的每个元素的值都进行了一些“映射”操作。 MRE如下:
#This is the original and switches value map
map = data.table(mapped = c(0:35), original = c(0:9,LETTERS))
#the function that I'm using:
as_numbers <- function(string) {
#split string unlisted
vector_unlisted <- unlist(strsplit(string,""))
#match the string in vector
for (i in 1:length(vector_unlisted)) {
vector_unlisted[i] <- subset(map, map$original==vector_unlisted[i])[[1]][1]
}
vector_unlisted <- paste0(vector_unlisted, collapse = "")
return(vector_unlisted)
}
我正在尝试从
for loop
移开,以提高性能,因为该函数可以正常工作,但是对于以这种形式提供的元素数量来说,它的速度相当慢:unlist(lapply(dat$alphanum, function(x) as_numbers(x)))
输入字符串的示例为:
549300JV8KEETQJYUG13
。这应该导致像5493001931820141429261934301613
这样的字符串在这种情况下,仅提供一个字符串:
> as_numbers("549300JV8KEETQJYUG13")
[1] "5493001931820141429261934301613"
最佳答案
使用Reduce
和gsub
,您可以定义以下函数
replacer <- function(x) Reduce(function(x,r) gsub(map$original[r],
map$mapped[r], x, fixed=T), seq_len(nrow(map)),x)
# Let's test it
replacer("549300JV8KEETQJYUG13")
#[1] "5493001931820141429261934301613"
关于r - 通过远离for循环来提高性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35579650/