2015-08-14 1 views
0

У меня есть этот простой код, и он заводит меня орехами. Код просто перебирает векторную и субтиппинговую части.subscriptip не работает в R

preda <- function(d, k) { 
    n <- length(d) 
    cat("Length: ", n, "Loop:", k+1, "-", n, "\n") 
    for(i in seq(from=k+1, to=n, by=1)) { 
    cat("Index: ", i, "; Subscript Start: ", i-k, "; End: ", i-1, "\n") 
    cat("Value: ", d[i-k:i-1], "\n") # on first loop, this should do 1:3 
    } 
} 

Выход

> X = sample(0:1,100,replace=T) 
> preda(X, 3) 
    Length: 100 Loop: 4 - 100 
    Index: 4; Subscript Start: 1 End: 3 
    #it doesn't subscript here. 
    Value: 0 0 1 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 1 1 0 0 
    Index: 5 St: 2 En: 4 
    Error in d[i - k:i - 1] : only 0's may be mixed with negative subscripts 

Что мне не хватает?

+0

Я думаю, что вам не хватает закрывающей фигурной скобки '}' в вашей функции (по крайней мере, в сообщении) – erasmortg

+0

Да, вы правы. Я забыл добавить в сообщение. –

+2

измените этот 'd [i-k: i-1]' на этот 'd [(i-k) :(i-1)]' – erasmortg

ответ

2

У вас возникли проблемы с оператором толстой кишки (:). d[(i-k):(i-1)] к коммутации будет решать вопрос:

#> preda(X,3) 
#Length: 100 Loop: 4 - 100 
#Index: 4 ; Subscript Start: 1 ; End: 3 
#Value: 0 0 0 
#Index: 5 ; Subscript Start: 2 ; End: 4 
#Value: 0 0 1 
#... 

Помните, что оператор двоеточия (см help(":")) требует два аргумента (a и b), поэтому скобка будет держать вещи аккуратно.