Pourquoi l'itération d'une date donne-t-elle un résultat numérique? Par exemple:
test = as.Date("2009-01-01")
print( class( test ) )
# [1] "Date"
for ( day in test )
{
print( class( day ) )
}
# [1] "numeric"
Pourquoi l'itération d'une date donne-t-elle un résultat numérique? Par exemple:
test = as.Date("2009-01-01")
print( class( test ) )
# [1] "Date"
for ( day in test )
{
print( class( day ) )
}
# [1] "numeric"
?"for"
dit que seq
(la partie après in
) est "[A] n expression évaluant un vecteur (y compris une liste et une expression) ou un pairlist ou 'NULL' ".
Ainsi, votre vecteur Date
est contraint à numeric
car les objets Date
ne sont pas strictement des vecteurs:
is.vector(Sys.Date())
# [1] FALSE
is.vector(as.numeric(Sys.Date()))
# [1] TRUE
Vous n'êtes pas choisir la bonne fonction à appliquer à la Date de vecteurs lors de l'utilisation de boucles. Mieux serait d'emballage seq_along() pour à peu près chaque jour ou facteur qui est en boucle partout. Ensuite, vous allez faire deux chose: a) de mettre en place, donc vous vous attendez à un index qui commence à 1, et b) de se protéger contre les choses étranges qui se produisent avec une longueur de zéro vecteurs. Je pense aussi qu'il serait préférable de l'utiliser à d'autres facteurs, dont les boucles se transforme en personnage de vecteurs.
Avec référence à Josué de la réponse (qui est certainement juste et utile), je pense que l' is.vector
fonction est un peu mal étiquetés ou peut-être juste mal compris. Il pourrait s'appeler plus précisément hasNoAttributesOtherThanName
. La propriété que la plupart des gens considèrent "vectoric" est testé avec is.atomic
, la Date et l'POSIXct objets sera de retour TRUE
de ce test.
Il semble que la fonction C qui implémente la boucle for
ne copie aucun des attributs du vecteur. Cela inclut également l'attribut class
, qui devrait faire apparaître i
comme un objet Date
.
Vous pouvez étudier le code source de la fonction do_for(SEXP, SEXP, SEXP, SEXP)
(celle appelée par R for
) ici .
C'est une vieille question, mais je suis un novice sur R et face au même problème. Depuis mon problème serait traité en parallèle, j'ai utilisé foreach et vu le comportement est différent par rapport à la normale for
:
library(foreach)
start_date = as.Date("2013-08-1")
end_date = as.Date("2013-08-13")
days = seq(start_date, end_date, by = "day")
foreach(day = days, .combine='rbind') %dopar% {
print(class(day))
}
[1] "Date"
[1] "Date"
[1] "Date"
[1] "Date"
...
Comme je ne suis pas vécu de l'intérieur les choses de la plupart de R, donc je ne sais pas pourquoi, foreach
finit par avoir un comportement différent, mais qui a fonctionné pour mon but, et j'espère que pourrait être utile pour quelqu'un d'autre.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.