【发布时间】:2014-03-20 13:45:58
【问题描述】:
我正在尝试通过 R 中的循环填充一个向量。
# variables
vector1 <- c("aaaa", "bbbb", "ccccc", "ddddd")
vector2 <- c("bbbb", "eeeee", "fffff", "ddddd")
# function
total <- numeric(length(vector1)*length(vector2))
subtotal <- numeric(length(vector1))
aux <- 0
for(i in 1:length(vector2)){
subtotal = mapply(levenshteinSim, vector1, vector2[[i]])
total[(length(vector1)*aux)+1:length(vector1)*i] <- subtotal
inc(aux) <- 1
}
对于 4 个长度的 2 个向量,我有一个长度为 16 的总向量。
但是我得到了以下输出:
> total [1] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA 0 NA NA NA 0 NA NA NA 1
我做错了什么?
编辑:我从 RecordLinkage 包中获得的 Levensthein 函数,以及从 Hmisc 包中获得的 inc 函数。第一个比较两个字符串,另一个只是增加某个变量的值。
EDIT2:我正在使用一些奇怪的函数,但我的目标只是通过循环填充总向量,并使用小计值。让我们再举一个例子:
# variables
vector1 <- c("a", "b", "c", "d")
vector2 <- c("a", "b", "c", "d")
# function
total <- numeric(length(vector1)*length(vector2))
subtotal <- numeric(length(vector1))
aux <- 0
for(i in 1:length(vector2)){
subtotal = mapply(paste, vector1, vector2[[i]])
total[(length(vector1)*aux)+1:length(vector1)*i] <- subtotal
aux <- aux + 1
print(subtotal)
}
我期望得到以下结果:一个长度为 16 的向量 Total,其中填充了来自循环的小计向量。像这样的:
a b c d
"a a" "b a" "c a" "d a"
a b c d
"a b" "b b" "c b" "d b"
a b c d
"a c" "b c" "c c" "d c"
a b c d
"a d" "b d" "c d" "d d"
但是我得到了这个:一个有 28 个位置的向量,并且有很多 N/As:
[1] "a a" "b a" "c a" "d a" "0" "a b" "0" "b b" "0" "c b" "a c" "d b" "0" "b c" "0" "a d" "c c" NA NA
[20] "b d" NA NA NA "c d" NA NA NA "d d"
【问题讨论】:
-
levenshteinSim的功能是什么? -
它是 CRAN 包 RecordLinkage 中的一个函数。它比较两个字符串并给出它们的相似性。 (例如:1 个相似,0 个不相似)
-
试着阐明你的目标!
total和subtotal应该如何填写?