我经常使用R,但我无意中发现了一些奇怪的东西:

Sys.time() |> class()
times <- Sys.time()+1:3
print(times)
for (tme in times) {
  print(tme)
}
tme %in% times

这将提供以下输出:

> Sys.time() |> class()
[1] "POSIXct" "POSIXt" 
> times <- Sys.time()+1:3
> print(times)
[1] "2024-01-18 10:00:28 CET" "2024-01-18 10:00:29 CET" "2024-01-18 10:00:30 CET"
> for (tme in times) {
+   print(tme)
+ }
[1] 1705568429
[1] 1705568430
[1] 1705568431
> tme %in% times
[1] FALSE

这样的行为怎么说得过go ?我觉得最后一行特别难证明(tme %in% times == FALSE).

推荐答案

Reason behind

for循环中,表达式times将被强制转换为vector(当您通过键入?`for`来查看帮助文档时

计算结果为向量的表达式(包括列表和 表达式)或到配对列表或空.系数值将被强制 转换为字符向量.这可能是一个很长的矢量.

然而,在vector中,不会保留任何属性(当键入?vector并查看说明时)

向量产生给定长度和模式的‘简单’向量,其中 ‘Simple’向量没有属性,即Fulfits Is.ull(属性(.)).

Workaround

要保留所有属性,可以将times中的值转换为列表,例如,可以使用as.list(times) in for循环,如下所示

> for (time in as.list(times)) {
+     print(time)
+ }
[1] "2024-01-18 10:13:39 CET"
[1] "2024-01-18 10:13:40 CET"
[1] "2024-01-18 10:13:41 CET"

或者你可以用下面的sapply

> invisible(sapply(times, print))
[1] "2024-01-18 10:13:39 CET"
[1] "2024-01-18 10:13:40 CET"
[1] "2024-01-18 10:13:41 CET"

R相关问答推荐

如何在弹性表中为类别值的背景上色

在ggplot的注释表格中突出显示最大值

从API中抓取R数据SON

如何从当前行上方找到符合特定条件的最接近值?

我如何才能找到FAMILY=POISSON(LINK=&Q;LOG&Q;)中的模型预测指定值的日期?

为了网络分析目的,将数据框转换为长格式列联表

R中的哈密顿滤波

如何基于两个条件从一列中提取行

使用Scale_*_MANUAL时在图例中保留未使用的系数级别

汇总数据帧中的复制列,保持行的唯一性

Geom_arcbar()中出错:找不到函数";geom_arcbar";

优化从每个面的栅格中提取值

我是否可以使用多个变异项来构建顺序列(标记多个问题)

如何提取R中其他字符串和数字之间的字符串?

按组跨多列创建伪变量

R基于变量组合创建新的指标列

R中的Desolve:返回的导数数错误

R没有按顺序显示我的有序系数?

条形图中的条形图没有try 赋予它们的 colored颜色

在REST API中使用参数R