第14章 函數(shù)

14.1 簡介

函數(shù)是R中重要的組成部分,也是成為一個(gè)熟練使用R的科研工作者必備的技能。本章將為大家介紹關(guān)于R函數(shù)的部分。
函數(shù)具有以下三個(gè)優(yōu)點(diǎn):

  • 可以給函數(shù)命名一個(gè)有意義的名字,這樣可以讓代碼看起來更加清晰明了;
  • 如果需要修改代碼,這樣僅需修改一處即可,無須修改多處;
  • 消除復(fù)制粘貼過程中的無心之失,可以減少因?yàn)榭村e(cuò)或者想錯(cuò)所帶來的失誤。

函數(shù)具有風(fēng)格性和簡潔性

一個(gè)好的函數(shù)是可以讓讀者可以讀懂,并且可以進(jìn)行操作。所以必要的注釋是必不可少的。

14.2什么時(shí)候應(yīng)該使用函數(shù)

在書中,作者舉了一個(gè)關(guān)于簡單數(shù)值計(jì)算的例子。
簡單解釋一下書中的函數(shù)及參數(shù)

  • tibble函數(shù) 是可以創(chuàng)建一個(gè)數(shù)據(jù)框或者一個(gè)list;
  • na.rm 參數(shù) a logical indicating whether missing values should be removed.

那么這個(gè)代碼就很明了了 意思就是將每列的值調(diào)整為0-1之間。也就是這個(gè)是將數(shù)據(jù)進(jìn)行 正則化(regularization)(x-min/R)

  • 極差的英文是Range,所以后文中用了這個(gè)函數(shù)。
  • Range函數(shù)會(huì)返回兩個(gè)值,也就是最大值和最小值。因?yàn)闃O差就是最大值減去最小值。
    如果你上述的信息都理解了,我相信對(duì)于P187頁的函數(shù)你也能理解了。如果不知道0,5,10如何計(jì)算出的返回值,你可以像我一樣將X值帶入進(jìn)上述的函數(shù)。這樣你不僅會(huì)理解了函數(shù),也會(huì)理解了運(yùn)算的過程。

創(chuàng)建函數(shù)需要以下三個(gè)重要組成

  • 一個(gè)函數(shù)名稱 也就是<-左邊的名稱
  • 一個(gè)或者幾個(gè)輸入?yún)?shù),像書上的函數(shù)里面就一個(gè)輸入值 那就是df$a
  • 還需要一個(gè)函數(shù)體,也就是計(jì)算參數(shù)的代碼

人與計(jì)算機(jī)函數(shù)

這塊主要是講函數(shù)名稱的命名、規(guī)范及易讀性。

  • 切記名字太短,或者使用acbc等命名
  • 使用簡單的—將名字隔開,使名字更加清晰
  • 表達(dá)清楚所寫函數(shù)的意義

if函數(shù)的使用

if(condition) {
條件為真時(shí)執(zhí)行的代碼
} else{
條件為假時(shí)執(zhí)行的代碼 }
注意 condition應(yīng)該返回值為T or F 不應(yīng)該為NA或者一個(gè)向量

簡單使用一下

> x=10
10

if (x>0){
x=x+1
 } else{
print(x)}
> x
[1] 11

升級(jí)版

> has_name <- function(x) {
+     nms <- names(x) #查看數(shù)據(jù)的名字
+     if (is.null(nms)) { #判斷nms是不是null值
+         rep(FALSE, length(x)) 如果是則復(fù)制FLASE 重復(fù)x個(gè)
+     } else {如果不是
+         !is.na(nms) & nms != "" 則判斷nms是不是缺失值和是不是等于空值
+     }
+ }

多重if值的跟這個(gè)差不多,不過if循環(huán)的太多你就該考慮換個(gè)函數(shù)了!

函數(shù)參數(shù)

函數(shù)參數(shù)要寫的完整,要選擇有意義的參數(shù)名稱,盡量選擇縮寫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,195評(píng)論 0 13
  • 這是一篇復(fù)盤文,也是一篇讓自己清醒的文章,認(rèn)識(shí)到自己的不足,從而去改變。 這幾日都是公司的內(nèi)訓(xùn),從公司的內(nèi)訓(xùn)中我才...
    藺旭瑋閱讀 246評(píng)論 0 0
  • 善惡之分 天枰之中 一念之間
    單生閱讀 161評(píng)論 0 3
  • 1. 問題描述 princeton_algs4第四周的編程作業(yè)Boggle,一個(gè)拼字游戲。將棋盤上的字母按照限定的...
    人造現(xiàn)實(shí)閱讀 899評(píng)論 0 0