我正在寻找R中最快的方法,如果它尚不存在,则向元素添加元素(字符类型)。现在我只是
vect=c("a","b","c")
vect=unique(c(vect,"b"))
vect=unique(c(vect,"d"))
等
但我认为必须有更好的方法来做到这一点。有什么想法吗? (我的载体有大约200万个字符串(网址))
欢呼声, 汤姆
答案 0 :(得分:4)
来自%chin%
的{{1}}运算符专门用于快速处理字符向量。这是一个例子:
data.table
答案 1 :(得分:3)
显然,你想要两个向量的联合:
vect <- c("a","b","c")
add <- c( "a" , "d" , "e" , "b" )
union(vect, add)
#[1] "a" "b" "c" "d" "e"
正如Simon指出的那样,与你的解决方案相同。
以下是一些基准:
library(data.table)
library(microbenchmark)
microbenchmark(union(vect, add),c( vect , add[ ! add %chin% vect ] ),times=10)
# Unit: microseconds
# expr min lq median uq max neval
# union(vect, add) 12.628 13.243 13.3980 15.092 65.599 10
# c(vect, add[!add %chin% vect]) 2.773 3.080 3.3885 4.620 51.740 10
vect <- as.character(seq_len(1e6))
microbenchmark(union(vect, add),c( vect , add[ ! add %chin% vect ] ),times=10)
#Unit: milliseconds
# expr min lq median uq max neval
# union(vect, add) 176.34441 188.82082 261.09802 339.96974 493.7810 10
#c(vect, add[!add %chin% vect]) 35.37661 37.14743 47.06862 70.46896 203.7034 10
答案 2 :(得分:0)
vect <- if (!"d" %in% vect) c(vect, "d") else vect