2016-10-14 1 views
-1

Простите мое невежество, но я был бы признателен, если кто-то объяснит мне, почему я получаю этот результат. Я ожидаю, что результат будет пустым, потому что я хотел, чтобы перебрать число строк и число строк равно 0. Вместо этого он перебирает 2 раза:Почему для n в 1: 0 в итерациях 2 раза в R?

> df<-data.frame() 
> nrow(df) 
[1] 0 
> for(n in 1:nrow(df)){ cat("foo")} 
foofoo 

Кроме того, что правильное выражение итерации над количество строк в файле data.frame?

UPDATE:

Спасибо за комментарии. Я заменил 1:nrow(df) seq_len(nrow(df)) и он работает. 1: 0 фактически содержащий два элемента и и перебирает эти элементы:

> 1:0 
[1] 1 0 
+8

По этой причине '1: nrow (df)' не следует использовать. Вместо этого используйте 'seq_len (nrow (df))'. – nicola

+0

@nicola вы должны опубликовать это как ответ. :) – Therkel

ответ

1

Диапазон X: Y дает вектор из X в Y, включая X и Y. If X> Y, список уменьшается. В вашем случае вы запрашиваете список из 1: 0, который имеет два элемента: 1 и 0.

+0

Сделайте это NROW(), и он не выплюнет ошибку, когда встретит одномерный объект. – mkearney

+0

«Если Y> X, список уменьшается» - не должно быть «если X> Y»? – Therkel

+0

спасибо @Therkel исправлено – SlowLearner