通过r中的循环填充矢量

时间:2014-03-20 13:45:59

标签: r loops vector

我正在尝试通过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"

1 个答案:

答案 0 :(得分:1)

你的问题来自&#39;:&#39;运算符的优先级高于其他运算符,请尝试 添加括号:

total[((length(vector1)*aux)+1):(length(vector1)*i)] <- subtotal

或者,您可能更愿意将整个代码替换为:

as.vector(outer(vector1,vector2,paste))