传递向量以在R

时间:2016-02-23 10:01:27

标签: r parameter-passing

我有一个POS标签的矢量。 我想创建一个POS标签的全局二元组矢量。 我在R中创建了以下函数:

createbi<-function(a) {
  for(i in 1:(length(a)-1)){
    bigramlist<-c(bigramlist,(paste(a[i], a[i+1], sep=" ")))
  }
}

这里我希望传递一个标签列表:

> a$POStags
 [1] "DT"  "VBZ" "DT"  "JJ"  "NN"  "VBG" "IN"  "DT"  "NNS" ","   "NNS" ","   "CC"  "NNS" "." 

但是我没有在bigramlist中获得bigrams。我认为问题在于参数传递。 我希望输出为:

> bigramlist
 [1] "DT VBZ" "VBZ DT" "DT JJ"  "JJ NN"  "NN VBG" "VBG IN" "IN DT"  "DT NNS" "NNS ,"  ", NNS"  "NNS ,"  ", CC"   "CC NNS"
[14] "NNS .

有人可以帮我这个我是R的新手

1 个答案:

答案 0 :(得分:2)

以下是针对您的问题的三种不同方法,从最常见到最不可取(在我看来):

a)粘贴头/尾

x表示您的向量a$POStags的情况下,另一种可能更多的R-ish方法是在paste的两个子集上直接使用x:< / p>

paste(head(x, -1), tail(x, -1))
#[1] "DT VBZ" "VBZ DT" "DT JJ"  "JJ NN"  "NN VBG" "VBG IN" "IN DT"  "DT NNS" "NNS ,"  ", NNS"  "NNS ," 
#[12] ", CC"   "CC NNS" "NNS ." 

当然你也可以把它放在一个函数中:

createbi <- function(a) paste(head(a, -1), tail(a, -1))

b)sapply

或者您可以使用sapply循环,如下所示(但我更喜欢第一种方法):

createbi2 <- function(a) sapply(1:(length(a)-1), function(i) paste(a[i], a[i+1]))

c)for循环

如果你坚持使用for循环,我就这样做(注意预先分配bigramlist):

createbi <- function(a) {
  n <- length(a)-1
  bigramlist <- character(n)
  for(i in 1:n){
    bigramlist[i] <- paste(a[i], a[i+1])
  }
  bigramlist
}

但是你现在看到a)比编写for循环更简单的方法。