R语言function快速掌握-自定义函数

news2024/9/24 19:14:43

R语言在生物学中运用的比较多的还是吊包然后使用内置函数进行一次性工作,但是生物信息与计算生物学领域确实低估和忽视了R语言在循环和自定义函数方面的优势。

在R语言中,function 是一个核心概念,它允许用户创建可重用的代码块来执行特定的任务。函数是一段组织好的,可重复使用的,用来实现单一,或相关联功能的代码片段。它们可以接受输入参数,并返回一个或多个输出值。


目录

函数的基本结构:

 例1:简单自定义函数

(1)两个参数加法:

(2)多参数运算

例2:带有内循环的函数定义

(1)计算偶数累计和

(2)更为复杂的例子

基因表达数据集成函数


函数的基本结构:

  • 函数名:用于标识函数的名称。
  • 参数列表:括号内的变量,用于接收传递给函数的值。
  • 函数体:大括号内的代码块,定义了函数执行的操作。
  • 返回值:函数执行完毕后返回的结果,通常是函数体中的最后一个表达式的结果。
function_name <- function(arg_1, arg_2, ...) {
  # 函数体
  # 执行的代码块
  return(output)
}

其中:

  • function_name 是函数的名称。
  • arg_1, arg_2, ... 是函数的形式参数列表。
  • return(output) 用于指定函数的返回值。

 例1:简单自定义函数

(1)两个参数加法:

我们尝试自己写一个加法函数,实现将两个数相加。

addFunction <- function(x,y){
  addResult <- x + y
  return(addResult)
}
addFunction(1,5)

(2)多参数运算

fixFunction <- function(a,x,y,z) {
  fixResult <- x^2 + y*z -a
  return(fixResult)
}
a <- 10
x <- 5
y <- 8
z <- 4
fixFunction(a,x,y,z)

例2:带有内循环的函数定义

往往复杂函数的运算需要内置循环,这个方式其实和java很像

(1)计算偶数累计和

# 定义一个自定义函数,该函数接收一个数值向量,并计算所有偶数的累积和
sum_even_numbers <- function(nums) {
  sum_even <- 0 # 初始化偶数累积和为0
  for (num in nums) {
    if (num %% 2 == 0) { # 检查数字是否为偶数
      sum_even <- sum_even + num # 如果是偶数,则加到累积和中
    }
  }
  return(sum_even) # 返回偶数累积和
}

# 创建一个数值向量
numbers <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

# 调用自定义函数
result <- sum_even_numbers(numbers)

# 打印结果
print(result)

(2)更为复杂的例子

# 定义一个更复杂的函数
complex_function_v2 <- function(numbers, threshold) {
  # 初始化结果向量
  result <- numeric(length(numbers))
  
  # 遍历输入向量的每个元素
  for (i in seq_along(numbers)) {
    # 计算当前元素的累积乘积
    prod_value <- prod(numbers[1:i])
    # 计算从1到当前元素值的累加和
    sum_value <- sum(1:numbers[i])
    
    # 应用条件判断
    if (numbers[i] > threshold) {
      # 如果当前元素值大于阈值,则加上一个特定的值(例如10)
      adjustment <- 10
    } else {
      # 否则不加调整
      adjustment <- 0
    }
    
    # 将计算结果和调整值结合起来,并存储在结果向量中
    result[i] <- prod_value * sum_value + adjustment
  }
  
  # 返回结果向量
  return(result)
}

# 测试函数
numbers <- c(1, 2, 3, 4, 5)
threshold <- 3
result <- complex_function_v2(numbers, threshold)
print(result)

基因表达数据集成函数

在生物信息学中,我们经常需要处理基因表达数据,这可能包括标准化数据、识别差异表达基因、进行聚类分析等。以下是一个复杂的R函数示例,它模拟了处理基因表达数据的过程:

# 定义一个处理基因表达数据的复杂函数
process_gene_expression <- function(expression_matrix, group_labels, p_value_threshold) {
  # 标准化基因表达数据
  standardized_data <- scale(expression_matrix)
  
  # 差异表达分析
  library(limma)
  design_matrix <- model.matrix(~ factor(group_labels))
  fit <- lmFit(standardized_data, design_matrix)
  contrast_matrix <- makeContrasts(factor(group_labels)[2] - factor(group_labels)[1], levels = design_matrix)
  fit2 <- contrasts.fit(fit, contrast_matrix)
  fit2 <- eBayes(fit2)
  de_genes <- topTable(fit2, coef = 1, number = Inf, sort.by = "B", adjust.method = "BH")
  
  # 聚类分析
  library(gplots)
  hc <- hclust(dist(t(standardized_data)), method = "complete")
  row_order <- order.dendrogram(as.dendrogram(hc))
  col_order <- order.dendrogram(as.dendrogram(hclust(dist(expression_matrix))))
  heatmap.2(as.matrix(standardized_data[row_order, col_order]), 
            trace = "none", 
            key = TRUE, 
            density.info = "none", 
            labRow = FALSE, 
            labCol = FALSE, 
            dendrogram = "both", 
            scale = "none", 
            col = bluered(75))
  
  # 识别显著差异表达基因
  significant_genes <- rownames(de_genes[de_genes$P.Value < p_value_threshold, ])
  
  # 创建报告
  report <- list(
    standardized_data = standardized_data,
    de_genes = de_genes,
    significant_genes = significant_genes
  )
  
  # 返回报告
  return(report)
}

# 测试函数
# 假设expression_matrix是一个基因表达矩阵,group_labels是样本分组标签
# p_value_threshold是设定的p值阈值
# expression_matrix <- ... # 填充基因表达矩阵
# group_labels <- ... # 填充样本分组标签
# p_value_threshold <- ... # 设定p值阈值

# 处理基因表达数据
# report <- process_gene_expression(expression_matrix, group_labels, p_value_threshold)

# 打印报告
# print(report$standardized_data)
# print(report$de_genes)
# print(report$significant_genes)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PHP报错已解决】‘/www/wwwroot/xxxxxx/public/../thinkphp/start.php‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言&#xff1a; 作为开发者&#xff0c;遇到报错信息是在所难免的。然而&#xff0c;有些报错信息可能会让我们感到困惑&…

每日OJ_牛客_淘宝网店(日期模拟)

目录 牛客_淘宝网店&#xff08;日期模拟&#xff09; 解析代码 牛客_淘宝网店&#xff08;日期模拟&#xff09; 淘宝网店__牛客网 解析代码 这是一个变相的日期计算器。只不过2、3、5、7、11月算1天&#xff0c;其他7个月算2天。 既然是一个变相的日期计算器&#xff0c;那…

24暑假算法刷题 | Day39 | 动态规划 VII | LeetCode 198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

目录 198. 打家劫舍题目描述题解 213. 打家劫舍 II题目描述题解 337. 打家劫舍 III题目描述题解 打家劫舍的一天 &#x1f608; 198. 打家劫舍 点此跳转题目链接 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷…

初出茅庐:怎样获得实习机会——之找到一份工作

如果你刚开始工作&#xff0c;找到工作的最好和最简单的方法之一就是【实习】&#xff1b;许多技术类公司只雇佣实习生或者经验丰富的软件开发者&#xff0c;实习为公司提供了一个独一无二的机会&#xff0c;使其可以在雇用潜在员工之前对他们进行充分的评估。但实习的机会不是…

Pytorch升级之旅——基础概念

目录 一、人工智能简史 三次浪潮 DL,ML,AI三者之间的关系 二、模型评价指标 混淆矩阵 Overall Accuracy ​编辑 Average accuracy Kappa系数 Recall Precision F1 PR曲线 置信度 IOU AP mAP 三、常用包Numpy、pandas、matplotlib Numpy pandas matplotlib…

二叉树【2】遍历

先中后序 先序遍历&#xff1a;根左右 中序遍历&#xff1a;左跟右 后序遍历&#xff1a;左右跟 例图 先序性质 中序性质 后序性质 先序中序确定二叉树 后序中序确定二叉树 先序后序不能确定。 层序&#xff1a;广度优先搜索 如果需要修改树的元素&#xff0c;则需no…

机器学习(第六关--文本特征抽取)

以下内容&#xff0c;皆为原创&#xff0c;制作实属不易&#xff0c;感谢大家的观看和关注。 在此真诚的祝愿大家&#xff0c;生活顺顺利利&#xff0c;身体健健康康&#xff0c;前途似锦。 第一关&#xff1a;机器学习概念和流程http://t.csdnimg.cn/IuHh4第二关&#xff1a;…

【功能实现】Vue3中导航栏效果实现

功能需求&#xff1a; 点击导航后会跳转到相应的页面当页面在顶部时&#xff0c;导航栏模块背景是透明的当页面向下滚动超过150px时&#xff0c;导航栏背景为白色 效果实现&#xff1a; 1.准备列表 将导航栏区域的类名设置为动态&#xff0c;即通过判断isTransparent是否存在…

浅谈【数据结构】链表之其他形态

目录 1、带头结点的链表 2、创建步骤 3、循环链表 3.1创建循环链表 3.2循环链表的遍历 3.3链表中的闭环 4、静态链表 4.1静态链表初始化 谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注 没错&#xff0c;说的就是你&#xff0c;不用再怀疑&#xff01;&#…

在群晖上安装Git客户端

什么是 Git &#xff1f; Git 是一个分布式版本控制系统&#xff0c;提供了命令行界面&#xff08;CLI&#xff09;以及图形用户界面&#xff08;GUI&#xff09;两种方式进行操作。与 CVS、Subversion 一类的集中式版本控制工具不同&#xff0c;它采用了分布式版本库的作法&am…

LinkedList添加和删除方法的源码分析超详细

我们基于下面这段代码进行分析 进入add方法后调用的是linkLast方法 这是add方法真正的底层逻辑&#xff0c;首先将last值赋给l节点&#xff0c;此时的l为null&#xff0c;然后再创建新节点的时候将l作为前向指针传入&#xff0c;将节点中的next指针也赋值为null&#xff0c;之后…

PHP反序列化二

1.反序列化基础利用 2.pop链 POP链: POP(面向属性编程&#xff09;链是指从现有运行环境中寻找一系列的代码或指令调用&#xff0c;然后根据需求构造出一组连续的调用链。 反序列化利用就是要找到合适的POP链。其实就是构造一条符合原代码需求的链条&#xff0c;去找到可以控…

基于YOLOv8的无人机高空红外(HIT-UAV)检测算法,新的混合型扩张型残差注意力(HDRAB)助力涨点(二)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文内容&#xff1a;针对基于YOLOv8的无人机高空红外&#xff08;HIT-UAV&#xff09;检测算法进行性能提升&#xff0c;加入各个创新点做验证性试验。 &#x1f4a1;&#x1f4a1;&#x1f4a1;一种新的混合型扩张型残差注意力(HDRAB…

Springboot基础------控制器、过滤器、拦截器、监视器

控制器 控制器用于接收和响应用户发送的请求&#xff0c;一个控制器类需要被Controller注解&#xff1a;&#xff08;即controller层&#xff09; Controller class TestController { }注&#xff1a; RestController实际上是Controller和ResponseBody的简化版&#xff0c;被…

数据仓库系列 3:数据仓库的主要组成部分有哪些?

你是否曾经好奇过,当你在网上购物或使用手机应用时,背后的数据是如何被存储和分析的?答案就在数据仓库中。本文将为你揭开数据仓库的神秘面纱,深入探讨其核心组成部分,以及这些组件如何协同工作,将海量数据转化为有价值的商业洞察。 目录 引言:数据仓库的魔力1. 数据源和数据…

STM32 | STM32 FLASH第十二天(实现代码STM32CUBEMX)

点击上方"蓝字"关注我们 01、FLASH >>> 1、STM32 FLASH Flash内部存储器,内存器件的一种,是一种非易失性( Non-Volatile )内存。 flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元…

mac 虚拟机PD19运行E-prime实验遇到E-prime unable to set display mode:0*80004001问题解决

作者&#xff1a;50% unable to set display mode问题 总结&#xff1a; 1. 修改该Experiment的Devices中的Dispaly为640*680,或800*600。 2. 右键开始菜单中的E-Studio程序&#xff0c;打开文件所在位置&#xff0c;然后右键该文件&#xff0c;选择属性-兼容性&#xff0c;勾选…

【内网渗透】ICMP隧道技术,ICMP封装穿透防火墙上线MSF/CS

~ 会当凌绝顶&#xff0c;一览众山小 ~ 前言 博客主页&#xff1a;h0ack1r丶羽~ 从0到1~ 渗透测试中&#xff0c;如果攻击者使用各类上层隧道(例如&#xff1a;HTTP隧道、DNS隧道、常规正/反向端口转发等)进行的操作都失败了&#xff0c;常常会通过ping命令访问远程计算机&am…

医疗多模态大模型是什么?医学多模态模型总结:算法其实很简单,拼的就是硬件算力的问题!多模态大模型(医疗影像分析)

概念 医学多模态大模型是指利用多种不同的医学数据源和模型&#xff0c;通过深度学习和人工智能技术&#xff0c;构建一个综合性的大型模型&#xff0c;以实现更加准确和全面的医学数据分析和预测。 这种模型可以同时处理多种医学数据类型&#xff0c;如医学图像、病历文本、…

自动驾驶---各大车企的端到端之旅

1 背景 端到端技术的落地速度确实有些超出预料&#xff0c;随着以ChatGPT为代表的AI大模型的快速发展&#xff0c;使得自动驾驶系统也能够像人一样进行“思考”&#xff0c;推动了自动驾驶技术的迭代升级。 特斯拉端到端技术的落地&#xff0c;自动驾驶在这一技术上的变化使得自…