我正在尝试通过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
我做错了什么?
编辑:Levensthein函数我从RecordLinkage包和inc函数,从Hmisc包中获得。第一个比较两个字符串,另一个只是将值递增到某个变量。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的向量,用循环中的小计向量填充。像这样:
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"
答案 0 :(得分:1)
你的问题来自&#39;:&#39;运算符的优先级高于其他运算符,请尝试 添加括号:
total[((length(vector1)*aux)+1):(length(vector1)*i)] <- subtotal
或者,您可能更愿意将整个代码替换为:
as.vector(outer(vector1,vector2,paste))