我有一个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的新手
答案 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循环更简单的方法。