未记录事实核验 · 状态:现行内容
记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。
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语言 #基础语法 #编程入门 #变量操作 #控制结构 #实战练习