r - 意外行为 seq() 函数
问题描述
我试过seq(0:2)
了,它有一个奇怪的输出。基本上,为什么:
seq(from= c(0,1,2))
输出:
1 2 3
?
解决方案
基本上,如果您将长度 > 1 的向量传递给seq
,它的语义会反映seq_along
或 的语义seq(along.with = …)
。也就是说,它为您提供了该向量的索引向量:
seq_along(0 : 2)
# [1] 1 2 3
seq(along.with = 0 : 2)
# [1] 1 2 3
奇怪的seq
是,没有根据 来实现seq_along
,而后者可能更有效。相反,相关部分的当前(R 4.1)实现seq
如下所示。
lf <- length(from)
return(if (mode(from) == "numeric" && lf == 1L) {
if (!is.finite(from)) stop("'from' must be a finite number")
1L:from
} else if (lf) 1L:lf else integer())
并且实现seq(along.with = …)
还是不一样的:
length.out <- length(along.with)
return(if (length.out) seq_len(length.out) else integer())
……顺便说一句,这是多余的;它可以缩短为以下内容:
length.out <- length(along.with)
return(seq_len(length.out))
…老实说,默认seq
功能的实现有点乱。
推荐阅读
- ruby-on-rails - Rspec 获取 ActionController::UrlGenerationError: No route match
- laravel - Laravel 事件未在作业句柄内调用
- java - 如何将数据添加到字符串数据类型的 ArrayList
- python - 如何修复 return request.get_json 并在 web 中获取 null?
- python-3.x - python 3,无法理解导入系统
- export-to-csv - SpreadsheetGear - 将特定工作簿表保存到 CSV
- c - 在 fork() 没有得到预期的输出之后。为什么?
- django - 如何在 blob 中使用 django 将文件上传到数据库?
- ios - 在 Swift 中,如何保存类对象?
- java - 如何使用 LiveData 实现 zip 功能