r - 如何在不强制转换为数字的情况下迭代日期列表?

标签 r list date for-loop

这与Looping over a Date or POSIXct object results in a numeric iterator有关

> dates <- as.Date(c("2013-01-01", "2013-01-02"))
> class(dates)
[1] "Date"
> for(d in dates) print(class(d))
[1] "numeric"
[1] "numeric"
我有两个问题:
  • 迭代 Date 对象列表的首选方法是什么?
  • 我不明白约书亚的回答(从上面链接的问题中接受的答案),我会在这里引用它:“所以你的 Date 向量被强制转换为 numeric 因为 Date 对象不是严格的向量”。那么如何确定Date应该被强制到 numeric ?
  • 最佳答案

    这里有两个问题。一是输入是否被强制来自 Datenumeric .另一个是输出是否被强制为 numeric .

    输入

    For 循环强制 Date输入到 numeric ,因为正如@DWin 和@JoshuaUlrich 指出的那样,for循环取vectors , 和 Date s 在技术上不是向量。

    > for(d in dates) print(class(d))
    [1] "numeric"
    [1] "numeric"
    

    另一方面,lapply及其简化后代 sapply没有这样的限制。
    > sapply( dates, function(day) class(day) )
    [1] "Date" "Date"
    

    输出

    然而! class()的输出上面是一个字符。如果你尝试实际返回一个日期对象,sapply不是你想要的。
    lapply不强制为向量,但 sapply做:
    > lapply( dates, identity )
    [[1]]
    [1] "2013-01-01"
    
    [[2]]
    [1] "2013-01-02"
    
    > sapply( dates, identity )
    [1] 15706 15707
    

    那是因为 sapply的化简函数将输出强制转换为向量。

    摘要

    所以:如果你有 Date对象并想返回一个非 Date对象,您可以使用 lapplysapply .如果您有非 Date对象,并希望返回 Date对象,您可以使用 for循环或 lapply .如果您有 Date对象并希望返回 Date对象,使用 lapply .

    学习更多资源

    如果你想更深入地研究向量,你可以从 John Cook's notes 开始, 继续 R Inferno ,然后继续 SDA .

    关于r - 如何在不强制转换为数字的情况下迭代日期列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14527564/

    相关文章:

    javascript - 如何从字符串创建日期,忽略任何时区偏移?

    r - 如何使用 r 删除文本文档中没有 http 的 url

    python - 当我尝试对列表进行排序时,出现错误 'dict' 对象没有属性

    python - 创建包含成对的另一个列表的列表?

    python - 获取句子中字母的频率

    javascript 日期比较

    excel - 检查输入日期格式

    r - 如何比较不同阶数的因子水平?

    r - 如何导入.ods?

    r - 嵌套 for 循环到函数和 lapply