R语言——类与对象

已知2024年4月23日是星期五,编写一个函数day.in.a.week (x, y,z),参数x和y和z分别代表年月日,判断这一天是否存在(例如,2018年没有2月29日,也没有11月31日),如果不存在,返回日期不存在;否则计算并返回当天是星期几。星期几判断方法参照:Sys.Date() weekdays(Sys.Date())

编写程序实现冒泡排序,对向量c(4,3,2,5,6,1)进行排序。

练习使用list列表构建一个学生对象(包含学生姓名、年龄、绩点),并运用class将对象的类设置为student。

使用构造函数创建S3类对象(包含学生姓名、年龄、绩点),类名为student,同时编写一个类的专属方法,打印出学生绩点。如:Hi xiaoming,your GPA is 4

练习使用setClass定义S4学生类student_one,并创建一个学生对象(包含学生姓名、年龄、绩点),同时使用validity进行绩点合理性判断。在控制台打印出学生信息

  1. 已知2024年4月23日是星期五,编写一个函数day.in.a.week (x, y,z),参数x和y和z分别代表年月日,判断这一天是否存在(例如,2018年没有2月29日,也没有11月31日),如果不存在,返回日期不存在;否则计算并返回当天是星期几。星期几判断方法参照:Sys.Date() weekdays(Sys.Date())

代码:

R 复制代码
day_in_a_week <- function(x, y, z) {

  # 判断日期是否存在

  if (!isTRUE(all.equal(as.Date(paste(x, y, z, sep="-"), format="%Y-%m-%d"), as.Date(paste(x, y, z, sep="-"))))) {

    return("日期不存在")

  } else {

    # 计算星期几

    weekday <- weekdays(as.Date(paste(x, y, z, sep="-")))

    return(paste("这一天是星期", weekday))

  }

}

# 测试函数

day_in_a_week(2024, 4, 23)

截图:

  1. 编写程序实现冒泡排序,对向量c(4,3,2,5,6,1)进行排序。

代码:

R 复制代码
bubble_sort <- function(vec) {

  n <- length(vec)

  for (i in 1:(n - 1)) {

    for (j in 1:(n - i)) {

      if (vec[j] > vec[j + 1]) {

        temp <- vec[j]

        vec[j] <- vec[j + 1]

        vec[j + 1] <- temp

      }

    }

  }

  return(vec)

}

# 测试冒泡排序算法

vec <- c(4, 3, 2, 5, 6, 1)

sorted_vec <- bubble_sort(vec)

print(sorted_vec)

截图:

  1. 练习使用list列表构建一个学生对象(包含学生姓名、年龄、绩点),并运用class将对象的类设置为student。

代码:

R 复制代码
student <- list(

  name = "张三",

  age = 20,

  gpa = 3.5

)

class(student) <- "student"



# 测试学生对象

print(student)

截图:

  1. 使用构造函数创建S3类对象(包含学生姓名、年龄、绩点),类名为student,同时编写一个类的专属方法,打印出学生绩点。如:Hi xiaoming,your GPA is 4

代码:

R 复制代码
student <- function(name, age, gpa) {

  obj <- list(

    name = name,

    age = age,

    gpa = gpa

  )

  class(obj) <- "student"

  return(obj)

}



print_gpa <- function(obj) {

  cat("Hi", obj$name, ", your GPA is", obj$gpa, "\n")

}

# 创建学生对象

xiaoming <- student("小明", 18, 4.0)

print_gpa(xiaoming)

截图:

  1. 练习使用setClass定义S4学生类student_one,并创建一个学生对象(包含学生姓名、年龄、绩点),同时使用validity进行绩点合理性判断。在控制台打印出学生信息

代码:

R 复制代码
setClass("student_one",

         slots = list(

           name = "character",

           age = "numeric",

           gpa = "numeric"

         ),

         validity = function(object) {

           if (object@gpa < 0 | object@gpa > 4.0) {

             return("绩点不合理")

           }

         }

)



# 创建学生对象

xiaohong <- new("student_one",

                name = "小红",

                age = 20,

                gpa = 3.8)

# 打印学生信息

print(xiaohong)

截图:

相关推荐
景天科技苑4 分钟前
【Rust泛型】Rust泛型使用详解与应用场景
开发语言·后端·rust·泛型·rust泛型
Swift社区4 分钟前
Swift实战:如何优雅地从二叉搜索树中挑出最接近的K个值
开发语言·ios·swift
愚润求学11 分钟前
【Linux】简单设计libc库
linux·运维·开发语言·c++·笔记
桃子酱紫君15 分钟前
华为配置篇-RSTP/MSTP实验
开发语言·华为·php
刚入坑的新人编程16 分钟前
C++STL——map和set的使用
开发语言·c++
Bl_a_ck42 分钟前
--openssl-legacy-provider is not allowed in NODE_OPTIONS 报错的处理方式
开发语言·前端·web安全·网络安全·前端框架·ssl
Auc241 小时前
OJ判题系统第6期之判题逻辑开发——设计思路、实现步骤、代码实现(策略模式)
java·开发语言·docker·容器·策略模式
向日葵xyz1 小时前
Qt5与现代OpenGL学习(十一)OpenGL Widget鼠标控制直线旋转
开发语言·qt·学习
智慧地球(AI·Earth)1 小时前
OpenAI for Countries:全球AI基础设施的“技术基建革命”
开发语言·人工智能·php
不学无术の码农2 小时前
《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码
开发语言·python