公司动态
R • exercises
catalogue题目1变量赋值和基本运算题目2向量创建和元素访问题目3使用内置函数计算统计量题目4混合运算与优先级理解题目5模运算与整数除法题目6类型转换与比较运算题目7因子Factor的创建与理解题目8逻辑Logical向量与索引提取题目9列表List的创建与元素访问题目10基础if-else判断数字性质判断题目11嵌套if与逻辑运算符成绩等级评定题目12ifelse()向量化函数解惑题目13基础for循环数列求和题目14while循环与条件控制斐波那契数列题目15循环控制与next语句特定倍数查找题目1变量赋值和基本运算num-10square-num**2cube-num**3print(paste(平方为,square,立方为,cube))#用print()将字符串和变量值同时输出要结合paste()cat(平方为,square,立方为,cube,\n)题目2向量创建和元素访问vec-c(5,10,15,20,25)cat(第三个元素为,vec[3])cat(向量长度为,length(vec))题目3使用内置函数计算统计量data-c(12,15,18,21,24)cat(平均值为,mean(data),总和为,sum(data),标准差为,sd(data))题目4混合运算与优先级理解result1-34*5result2-(34)*5print(paste(3 4 * 5 ,result1, ,(3 4) * 5 ,result2))题目5模运算与整数除法days-365weeks-days%/%7remaining_days-days%%7cat(365天是,weeks,个星期零,remaining_days,天)题目6类型转换与比较运算num_var-123char_var-123converted_var-as.numeric(char_var)cat(num_var与converted_var的值是否相等,num_varconverted_var)#只比较值cat(num_var与char_var的值是否相等,num_varchar_var)cat(num_var的类型为,class(num_var))cat(char_var的类型为,class(char_var))cat(converted_var的类型为,class(converted_var))cat(num_var与converted_var是否相等,identical(num_var,converted_var))#identical()比较值、类型cat(num_var与char_var是否相等,identical(num_var,char_var))题目7因子Factor的创建与理解将unclass()的结果单独打印这样能更清晰地显示整数向量。对于向量结果使用print()比cat()更能保持原始格式。weather-c(Sunny,Cloudy,Rainy,Sunny,Rainy)weather_factor-factor(weather,levelsc(Rainy,Cloudy,Sunny))print(weather_factor)print(因子的内部数值表示)print(unclass(weahter_factor))print(因子的水平)print(levels(weahter_factor))#print(paste(因子的内部数值表示,unclass(weather_factor)))#cat(因子的水平,levels(weather_factor))题目8逻辑Logical向量与索引提取scores-c(85,92,78,60,95,53)pass_logical-scores60print(pass_logical)print(scores[pass_logical])题目9列表List的创建与元素访问my_list-list(c(1,2,3),Hello World,TRUE)print(my_list[[2]])#提取元素本身print(class(my_list[[2]]))print(my_list[2])#提取子列表print(class(my_list[2]))names(my_list)-c(numbers,greeting,flag)print(my_list$greeting)题目10基础if-else判断数字性质判断user_input-readline(请输入一个数字)#获取输入num-suppressWarnings(as.numeric(user_input))#使其不报错如果转换错误则num为NULLif(is.na(num)){#处理非数字输入的情况cat(错误您输入的不是有效的数字\n)}else{#处理正确输入的情况if(num0){cat(正数\n)}elseif(num0){cat(负数\n)}else{cat(零\n)}}题目11嵌套if与逻辑运算符成绩等级评定user_input-readline(请输入成绩)num-suppressWarnings(as.numeric(user_input))if(is.na(num)){cat(user_input,不是有效数字\n)}else{if(num100|num0)cat(Invalid Score)elseif(num90)cat(Excellent)elseif(num80)cat(Good)elseif(num70)cat(Average)elseif(num60)cat(Pass)elsecat(Fail)}题目12ifelse()向量化函数# 1. 创建数值向量x-c(-2,5,0,12,-5,9,100)# 2. 使用ifelse()函数进行向量化判断result_vec-ifelse(x0,Positive,Non-Positive)# 3. 打印结果print(result_vec)# 4. 使用传统的for循环和if-else语句实现同样功能result_loop-character(length(x))# 创建空字符向量存储结果for(iin1:length(x)){if(x[i]0){result_loop[i]-Positive}else{result_loop[i]-Non-Positive}}# 打印循环实现的结果print(result_loop)# 验证两种方法结果是否一致identical(result_vec,result_loop)解惑为什么空字符向量用result_loop - character(length(x))而不是result_loop - c()因为result_loop - character(length(x))提前分配好了存储结果的内存空间而result_loop - c()每次循环时都会重新分配内存当数据量大时会严重影响性能这就是为什么在传统for循环中通常需要预先初始化结果向量的原因。题目13基础for循环数列求和numbers-c(2,5,8,11,14)sum_of_squares-0for(iinnumbers){#i用num更好看sum_of_squares-sum_of_squaresi^2}cat(数列平方和为,sum_of_squares)#使用cat打印print应为print(paste())题目14while循环与条件控制斐波那契数列prev-1# 上一个curr-1# 当前fib_seq-c(prev,curr)while(TRUE){next_val-prevcurr# 下一个if(next_val100)breakfib_seq-c(fib_seq,next_val)# 符合要求的放这prev-curr# 把上一个更新为curr因为有了新的“下一个”curr-next_val# 把前“下一个”更新为curr因为有了新的“下一个”}cat(斐波那契数列为,fib_seq,\n)题目15循环控制与next语句特定倍数查找is_prime-function(n){if(n1){# 小于等于1的不是质数return(FALSE)}elseif(n2){# 2是最小的质数return(TRUE)}elseif(n3){# 3在下面循环里会被误判为非质数,不能用||把3和前面的2放一起因为这样只会打印2return(TRUE)}elseif(n%%20){return(FALSE)}# 偶数除了2不是质数for(iinseq(3,floor(sqrt(n)),by2)){# 检查从3到sqrt(n)的奇数避免重复检查因为2是唯一的偶质数且奇数的因数只能是奇数if(n%%i0){return(FALSE)# 质数不能被其它数整除}}return(TRUE)# 不能放在for (i in seq(3, floor(sqrt(n)), by2))的else里因为可能有很多不整除导致提前退出循环但只要有一个整除就不要了}for(iin1:50){if(i%%150){# 放前面扔掉不要的再对剩下的判断cat(跳过15的倍数,i,\n)next# 跳出这次循环进入下一次循环}if(i%%30i%%5!0){if(is_prime(i))# 2是质数但2根本进不了if所以不打印 is_prime是个判断质数的通用函数cat(i,*\n,sep)# 质数加星号sep避免星号和质数间的空格elsecat(i,\n)# 不是质数直接打}}