码迷,mamicode.com
首页 > 编程语言 > 详细

R语言封装函数

时间:2019-07-15 23:58:06      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:处理   http   substr   大小   white   算法   包括   fill   flip   

R语言封装函数

原帖见豆瓣:https://www.douban.com/note/279077707/

 

一个完整的R函数,需要包括函数名称,函数声明,函数参数以及函数体几部分。

1. 函数名称,即要编写的函数名称,这一名称就作为将来调用R函数的依据。
2. 函数声明,函数名称 <- function, 即声明该对象的类型为函数。
3. 函数参数,这里是输入的数据,函数参数是一个虚拟出来的一个对象。函数参数所等于的数据,就是在函数体内部将要处理的值,或者对应的数据类型。 函数体内部的程序语句进行数据处理,就是对参数的值进行处理 ,这种处理只在调用函数的时候才会发生。函数的参数可以有多种类型。R help的界面对每个函数,及其参数的意义及所需的数据类型都进行了说明。

4.函数体

运算过程

R运算过程中,应该尽量减少循环的使用,特别是嵌套循环。R提供了 apply,replicate等一系列函数,来代替循环,应该尽量应用这些函数, 提高效率。 如果在R中实在太慢,那么核心部分只能依靠C或者Fortran 等语言编写,然后再用R调用这些编译好的模块,达到更高的效率。
运算过程中,需要大量用到if等条件作为判别的标准。if和while都是需要数据TRUE/FALSE这样的逻辑类型变量,这就意味着,if内部,往往是对条件的判别,例如 is.na, is.matrix, is.numeric等等,或者对大小的比较,如,if(x > 0), if(x == 1), if(length(x)== 3)等等。if后面,如果是1行,则花括号可以省略,否则就必须要将所有的语句都放在花括号中。这和循环是一致的。

例子1
## if与条件判断
fun.test <- function(a, b, method = "add"){
    if(method == "add") { ## 如果if或者for/while;
        res <- a + b ## 等后面的语句只有一行,则无需使用花括号。
}
    if(method == "subtract"){
        res <- a - b
    }
    return(res) ## 返回值
}
### 检验结果
fun.test(a = 10, b = 8, method = "add")
fun.test(a = 10, b = 8, method = "substract")
 
for循环有些时候是必须要用到的,for循环内部,往往需要用下标,访问数据内的一定元素,例如向量内的元素,这时候用方括号表示。一维的数据组合,或者数组,常常称为向量。二维的数据组合,往往称为矩阵,或者数据框。具体的访问方式主要是方括号内部有没有逗号的区别。for循环或者while循环有时候让人觉得比较困惑,可能需要专门的时间进行讲解。

例2
### for循环与算法
test.sum <- function(x)
{
    res <- 0 ### 设置初始值,在第一次循环的时候使用
    for(i in 1:length(x)){
        res <- res + x[i] ## 这部分是算法的核心,
##总是总右面开始计算,结果存到左边的对象
    }
    return(res)
}
 

### 检验函数
a <- c(1,2,1,6,1,8,9,8)
test.sum(a)
sum(a)

 

对于 博客中ggplot2的代码

可如下进行封装:

fun1 <- function(data, xlab, ylab, xname, yname) {
  ggplot(data, aes(xlab, ylab)) + 
    geom_bar(aes(fill = xlab), stat = identity) + 
    labs(x = xname, y = yname) +
    geom_text(aes(label = ylab), hjust = 1.5, colour = white) +
    coord_flip() +
    theme_minimal() +
    theme(legend.position = none)
}

调用如下:

data <- head(df_CJT_USA, 10)
xname <- CurrentJobTitleSelect
yname <- Count
fun1(data, reorder(data$CurrentJobTitleSelect, data$Count), data$Count, xname, yname)

 

R语言封装函数

标签:处理   http   substr   大小   white   算法   包括   fill   flip   

原文地址:https://www.cnblogs.com/Grayling/p/11190313.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!