r - R函数产生不正确的结果
问题描述
我正在尝试使用 R 中的函数变得更好,并且我正在研究一个函数来提取从 100 到 500 的每个可以被 3 整除的奇数值。我接近了下面的函数。它不断正确地返回所有值,但它还包含序列中的第一个数字 (101),但它不应该包含。任何帮助将不胜感激。我写的代码如下:
Test=function(n){
if(n>100){
s=seq(from=101,to=n,by=2)
p=c()
for(i in seq(from=101,to=n,by=2)){
if(any(s==i)){
p=c(p,i)
s=c(s[(s%%3)==0],i)
}}
return (p)}else{
stop
}}
Test(500)
解决方案
这是一个矢量化的单线,可以选择允许您将下限从默认值 100 更改为您喜欢的任何值。如果边界错误,它会返回一个空向量而不是抛出错误。
它的工作原理是创建一个1:500
(或更一般地说,1:n
)的向量,然后测试每个元素是否大于 100(或您设置的任何下限m
),以及每个元素是否为奇数以及每个元素是否可被 3 整除。它使用which
函数返回通过所有测试的元素的索引。
Test <- function(n, m = 100) which(1:n > m & 1:n %% 2 != 0 & 1:n %% 3 == 0)
因此,您可以按照问题中的说明使用它:
Test(500)
# [1] 105 111 117 123 129 135 141 147 153 159 165 171 177 183 189 195 201 207 213 219
# [21] 225 231 237 243 249 255 261 267 273 279 285 291 297 303 309 315 321 327 333 339
# [41] 345 351 357 363 369 375 381 387 393 399 405 411 417 423 429 435 441 447 453 459
# [61] 465 471 477 483 489 495
或者玩弄上下界:
Test(100, 50)
# [1] 51 57 63 69 75 81 87 93 99
推荐阅读
- java - 从Java中的主字符串中提取子字符串
- c++ - 如何实现vector::clear()?(学习目的)
- git - GitHub - 目标分支(主分支)中已存在文件更改显示代码块
- c# - 没有动画的蜘蛛般的运动
- javascript - 如何在 javascript/nodejs 中获取澳大利亚/悉尼时区偏移量?
- sql-server - 无法在 Laravel 中使用 Eloquent 和 SQL Server 数据库进行选择
- c++ - c++动态分配可调整大小数组
- css - Maven Spring MVC:背景图像无法识别
- filereader - 如何在不再次选择文件的情况下重新加载文件(输入类型=“文件”)Angular
- dialogflow-es - 如何使 Google 服务帐户凭据永久有效?