未记录事实核验 · 状态:现行内容

记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。

warning 适用边界与维护说明

本文适用于R基础语法入门及使用内置函数完成固定成绩的成绩单练习;成绩单使用预设学生信息和成绩,不是完整的成绩管理应用。输入示例应在交互式R会话中练习。“运行结果”展示R控制台文本,不是JSON数据。本次仅作全文结构与代码、展示结果的静态一致性审阅,未执行代码或进行外部事实核验。

note 适用边界

本文适用于R基础语法学习及使用内置函数完成成绩单练习,不是完整的成绩管理应用。成绩单示例使用代码中预设的学生信息和成绩,展示变量、运算、条件判断及格式化输出的基础用法。

🎯 R基础语法 - 你的第一堂编程课

tip 💝 给编程新手的暖心话

🤗 放轻松,学习R语法就像学说话一样自然!

如果你现在心里有点紧张:

  • "我从来没写过代码,会不会很难?"
  • "这些符号和英文单词好复杂..."
  • "万一写错了怎么办?"

别担心! 每个人学语言都是从模仿开始的 ✨

🗣️ 想象学习R就像学说一门新语言

  • 👶 婴儿学说话:先模仿 → 理解意思 → 自由表达
  • 📚 学外语:背单词 → 学语法 → 造句子 → 流利对话
  • 💻 学R语言:学语法 → 理解逻辑 → 写代码 → 解决问题

R语法比英语语法简单多了,而且立刻就能看到结果! 🌟

🎭 R语言的"说话方式"

💬 第一句R"话"

让我们从最简单的开始:

# 这是注释,R不会执行,只是给人看的说明
# 让R说"你好"
print("你好,R语言!")

# R 可以直接做数学计算,像计算器一样
1 + 2 + 3     # 加法
10 - 4        # 减法
6 * 7         # 乘法
15 / 3        # 除法
2 ^ 8         # 2 的 8 次方
17 %% 5       # 取余(17 除以 5 的余数)

运行结果:

[1] "你好,R语言!"
[1] 6
[1] 6
[1] 42
[1] 5
[1] 256
[1] 2

tip 💡 **计算器比喻**

想象R是一个超级智能计算器:

  • 🧮 普通计算器:只能算一个数
  • 🤖 R计算器:能算、能记住、能比较、能画图

试着把R当朋友:你问什么,它答什么!

📦 变量:R的"记忆盒子"

🎁 什么是变量?

note 💭 **生活中的比喻**

变量就像贴了标签的盒子:

  • 📦 盒子 = 存储空间
  • 🏷️ 标签 = 变量名字
  • 🎁 盒子里的东西 = 数据

例如:

  • 盒子标签写着"我的年龄" → 里面装着数字"25"
  • 盒子标签写着"我的名字" → 里面装着文字"小明"

📝 创建变量

# 创建数字变量
my_age <- 25
my_height <- 175.5

# 创建文字变量
my_name <- "小明"
my_city <- "北京"

# 创建逻辑变量(真/假)
is_student <- TRUE
has_car <- FALSE

# 查看变量内容
print(my_age)
print(my_name)

# 变量之间可以运算
my_age <- 25
friend_age <- 30
age_difference <- friend_age - my_age

print(age_difference)  # 结果:5

# 变量可以重新赋值
my_score <- 80
print(my_score)        # 80

my_score <- 90         # 更新分数
print(my_score)        # 90

# 变量可以参与计算后更新自己
my_score <- my_score + 5  # 加5分
print(my_score)        # 95

🏷️ 数据类型:R的"分类系统"

🎨 基础数据类型

example 🏪 **想象R的数据商店**

R把数据分类存放,就像超市的商品分区:

  • 🔢 数字区 = 存放各种数字
  • 📝 文字区 = 存放文字和句子
  • ✅ 逻辑区 = 只有TRUE和FALSE
  • 📅 日期区 = 存放时间和日期

1. 🔢 数值型 (Numeric)

# 整数和小数都是数值型
whole_number <- 42        # 整数
decimal_number <- 3.14    # 小数
negative_number <- -10    # 负数

# 检查数据类型
class(whole_number)       # "numeric"
typeof(decimal_number)    # "double"(双精度小数)
is.numeric(negative_number)  # TRUE

2. 📝 字符型 (Character)

# 文字内容都要用引号括起来
name <- "张三"
sentence <- "今天天气很好"
mixed <- "我有10个苹果"    # 数字在引号里就是文字

# 检查数据类型
class(name)               # "character"
is.character(sentence)    # TRUE

# 字符串操作
nchar(name)              # 计算字符数:2
paste(name, "你好")      # 拼接字符串:"张三 你好"

3. ✅ 逻辑型 (Logical)

# 只有两个值:TRUE 或 FALSE
is_sunny <- TRUE
is_raining <- FALSE
test_result <- 5 > 3     # TRUE(5确实大于3)

# 检查数据类型
class(is_sunny)          # "logical"
is.logical(test_result)  # TRUE

# 逻辑运算
TRUE & FALSE            # AND运算:FALSE
TRUE | FALSE            # OR运算:TRUE
!TRUE                   # NOT运算:FALSE

4. 📊 因子型 (Factor)

# 用于表示分类数据
gender <- factor(c("男", "女", "男", "女"))
grade <- factor(c("优", "良", "中", "优"), 
                levels = c("优", "良", "中", "差"))

print(gender)
# Levels: 女 男

print(grade)
# Levels: 优 良 中 差

🔍 类型检查和转换

# 检查变量类型
x <- 42
class(x)          # "numeric"
typeof(x)         # "double"
mode(x)           # "numeric"

# 类型转换
number_text <- "123"
real_number <- as.numeric(number_text)  # 转为数字
print(real_number + 10)  # 133

text_number <- as.character(456)        # 转为文字
print(text_number)       # "456"

logical_number <- as.logical(1)         # 转为逻辑
print(logical_number)    # TRUE(非0数字转为TRUE)

🔗 运算符:R的"动作词汇"

🧮 算术运算符

a <- 10
b <- 3

# 基础运算
print(a + b)    # 加法:13
print(a - b)    # 减法:7
print(a * b)    # 乘法:30
print(a / b)    # 除法:3.333333
print(a^b)      # 乘方:1000
print(a %% b)   # 取余:1
print(a %/% b)  # 整除:3

⚖️ 比较运算符

x <- 5
y <- 8

# 比较运算(结果是TRUE或FALSE)
print(x == y)   # 等于:FALSE
print(x != y)   # 不等于:TRUE
print(x < y)    # 小于:TRUE
print(x > y)    # 大于:FALSE
print(x <= y)   # 小于等于:TRUE
print(x >= y)   # 大于等于:FALSE

🔗 逻辑运算符

# 逻辑运算
sunny <- TRUE
warm <- FALSE

print(sunny & warm)   # AND:FALSE(既晴朗又温暖)
print(sunny | warm)   # OR:TRUE(晴朗或温暖)
print(!sunny)         # NOT:FALSE(不晴朗)

# 实际应用
temperature <- 25
weather <- "sunny"

nice_day <- (temperature > 20) & (weather == "sunny")
print(nice_day)       # TRUE

↔️ 赋值运算符

# 多种赋值方式
x <- 10        # 推荐方式(向左箭头)
y = 20         # 等号方式
30 -> z        # 向右箭头(不推荐)

print(c(x, y, z))  # 10 20 30

# 特殊赋值
total <- 0
total <- total + 5    # 普通累加
# 等价于
total <- 0
total <- total + 5    # R没有 += 运算符

💬 输入输出:与R"对话"

🗣️ 输出信息

# 基础输出
print("Hello, World!")

# 格式化输出
name <- "小红"
age <- 23
print(paste("我叫", name, ",今年", age, "岁"))

# 更高级的格式化
cat("姓名:", name, "\n年龄:", age, "\n")

# sprintf格式化(类似其他编程语言)
message <- sprintf("我叫%s,今年%d岁", name, age)
print(message)

运行结果:

[1] "Hello, World!"
[1] "我叫 小红 ,今年 23 岁"
姓名: 小红 
年龄: 23 
[1] "我叫小红,今年23岁"

📥 输入信息

# 从用户获取输入(在RStudio中运行)
user_name <- readline(prompt = "请输入你的名字:")
print(paste("你好,", user_name))

# 获取数字输入
user_age <- as.numeric(readline(prompt = "请输入你的年龄:"))
print(paste("你", user_age, "岁了"))

🎮 控制结构:R的"决策系统"

🤔 条件判断 (if语句)

# 基础if语句
score <- 85

if (score >= 90) {
  print("优秀!")
} else if (score >= 80) {
  print("良好!")
} else if (score >= 60) {
  print("及格")
} else {
  print("需要努力")
}

运行结果:"良好!"

tip 💡 **if语句就像人的决策过程**

🧠 人的思考:

如果分数≥90 → 说"优秀"
否则如果分数≥80 → 说"良好"
否则如果分数≥60 → 说"及格"
否则 → 说"需要努力"

💻 R的if语句:完全一样的逻辑!

🔄 循环结构

for循环:重复固定次数

# 打印1到5
for (i in 1:5) {
  print(paste("这是第", i, "次"))
}

# 遍历名字列表
names <- c("小明", "小红", "小刚")
for (name in names) {
  print(paste("你好,", name))
}

运行结果:

[1] "这是第 1 次"
[1] "这是第 2 次"
...
[1] "你好, 小明"
[1] "你好, 小红"
[1] "你好, 小刚"

while循环:满足条件就重复

# 倒计时
count <- 5
while (count > 0) {
  print(paste("倒计时:", count))
  count <- count - 1
}
print("时间到!")

📊 简单数据结构

📝 向量:相同类型数据的队列

# 创建向量
numbers <- c(1, 2, 3, 4, 5)          # 数字向量
names <- c("张三", "李四", "王五")     # 字符向量
logicals <- c(TRUE, FALSE, TRUE)      # 逻辑向量

# 向量操作
print(numbers[1])        # 取第一个元素:1
print(numbers[1:3])      # 取前三个元素:1 2 3
print(length(numbers))   # 向量长度:5

# 向量运算
print(numbers * 2)       # 每个元素乘以2:2 4 6 8 10
print(numbers + 10)      # 每个元素加10:11 12 13 14 15

📋 列表:不同类型数据的集合

# 创建列表(可以存放不同类型的数据)
person <- list(
  name = "小明",
  age = 25,
  scores = c(85, 90, 78),
  married = FALSE
)

# 访问列表元素 —— 三种等价方式
print(person$name)       # 用 $ 按名字访问:"小明"
print(person[["name"]]) # 用 [[]] 按名字访问:"小明"
print(person[[1]])       # 用 [[]] 按位置访问(第1个元素):"小明"

print(person$scores)     # 访问向量元素:85 90 78
print(person$scores[2])  # 访问向量的第2个元素:90

# 修改列表元素
person$age <- 26
person$city <- "北京"    # 添加新字段
print(person$age)        # 26

# 查看列表结构
str(person)              # 显示列表的完整结构和类型信息
length(person)           # 列表长度:5(新增了 city 字段)

🎯 实战练习:制作成绩单

让我们用学到的知识做一个完整的小程序:

# =====================================
# 学生成绩管理小程序
# =====================================

cat("🎓 欢迎使用成绩管理系统!\n\n")

# 1. 学生信息
student_name <- "小明"
student_id <- "2024001"

# 2. 各科成绩
math_score <- 85
english_score <- 92
science_score <- 78

# 3. 计算总分和平均分
total_score <- math_score + english_score + science_score
average_score <- total_score / 3

# 4. 判断等级
if (average_score >= 90) {
  grade <- "优秀"
} else if (average_score >= 80) {
  grade <- "良好"
} else if (average_score >= 60) {
  grade <- "及格"
} else {
  grade <- "不及格"
}

# 5. 输出成绩单
cat("==========================================\n")
cat("📋 学生成绩单\n")
cat("==========================================\n")
cat("姓名:", student_name, "\n")
cat("学号:", student_id, "\n")
cat("------------------------------------------\n")
cat("数学成绩:", math_score, "分\n")
cat("英语成绩:", english_score, "分\n")
cat("科学成绩:", science_score, "分\n")
cat("------------------------------------------\n")
cat("总分:", total_score, "分\n")
cat("平均分:", round(average_score, 2), "分\n")
cat("等级:", grade, "\n")
cat("==========================================\n")

# 6. 生成建议
if (average_score >= 85) {
  cat("🎉 表现优异,继续保持!\n")
} else if (average_score >= 75) {
  cat("👍 成绩不错,还有提升空间!\n")
} else {
  cat("💪 需要加油,相信你能做得更好!\n")
}

运行效果:

🎓 欢迎使用成绩管理系统!

==========================================
📋 学生成绩单
==========================================
姓名: 小明 
学号: 2024001 
------------------------------------------
数学成绩: 85 分
英语成绩: 92 分
科学成绩: 78 分
------------------------------------------
总分: 255 分
平均分: 85 分
等级: 良好 
==========================================
🎉 表现优异,继续保持!

🎉 语法学习完成!

success 🌟 **恭喜你!现在你已经掌握了**

  • ✅ 基础语法:变量、数据类型、运算符
  • ✅ 控制结构:if判断、for循环、while循环
  • ✅ 输入输出:与R进行基本交互
  • ✅ 实战能力:能写简单的完整程序

你已经从"R语言小白"升级为"R语言初学者"了! 🚀

🎯 下一步学习建议

立即练习:

  • [ ] 修改成绩单程序,添加更多科目
  • [ ] 写一个计算BMI的小程序
  • [ ] 创建一个简单的购物清单管理

继续学习:

  • [ ] 学习 R数据结构 - 掌握更复杂的数据组织方式
  • [ ] 学习 数据导入导出 - 处理真实数据文件

quote 💭 **学习感悟**

记住:

  • 🎯 编程不是背代码,而是学会解决问题的思路
  • 💪 每个错误都是学习的机会
  • 🚀 多练习,多尝试,多问为什么

下次当你看到数据问题时,你会自然地想: "我可以用R来解决这个问题!" ✨


创建时间:2024-12-11
温度指数:⭐⭐⭐⭐⭐ (循序渐进,实例丰富)
预计学习时长:45-60分钟
下一步学习:R数据结构 → 数据导入导出

#R语言 #基础语法 #编程入门 #变量操作 #控制结构 #实战练习