H G W S哪一个不是状态函数_数据科学05 | R语言程序设计调试工具与str函数
調試工具debugging tools
?條件condition
用于提示運行函數過程中意外事件或錯誤的發生,編寫函數時可以自行創造新的提示條件。
message:由message()產生,輸出提示信息到Console控制臺,不會阻止函數運行
warning:由warning()產生,運行過程出現潛在的問題,函數繼續執行,完全執行后輸出警告
error:由stop()產生,運行過程出現重大問題無法繼續,強制終止運行
?調試函數時按以下流程考慮問題
1)實際輸入函數的是什么?
2)預期結果是什么?
3)怎么調用函數?參數是什么?
4)實際結果和預期結果之間有何區別?
5)最初的預期是否正確?
6)能否重塑問題?(如設定隨機數種子,重復產生問題的過程)
?R中的調試工具 ?
traceback 函數:打印函數調用棧 (function call stack),說明一共調用了多少個函數,以及錯誤發生的位置
debug 函數:傳遞一個函數作為參數,可以標記這個函數,進入調試模式(debug mode)
調試模式(debug mode):每當執行到這個函數時都會暫停執行,停在這個函數的第一行 ?
browser 函數:在代碼的任何地方調用 browser(),函數會停止執行,能從那里開始逐行運行,找出出現錯誤的代碼具體是哪一行
trace 函數:trace 函數允許在函數中插入調試代碼,避免了編輯函數本身
recover 函數:R默認在報錯之后回到控制臺,通過設置錯誤處理器 (error handler)可改變這種默認行為。recover() 是錯誤處理函數,函數遇到錯誤時R編譯器停止執行,但不回到控制臺,會停在函數出錯的地方,輸出函數調用棧。
出錯在第7層函數,出錯原因是它試圖解析公式y~x,eval()在解析公式時無法找到 y 和 x 的實際值。
必須在錯誤發生后馬上調用 traceback函數,traceback函數只能給出上一次執行的錯誤。
debug(lm) lm(y~x)debugging in: lm(y ~ x) debug: { ret.x ret.y cl mf FALSE) m "formula", "offset"), names(mf), 0L) mf 1L, m)] mf$drop.unused.levels TRUE mf[[1L]] mf eval(mf, ... if (!qr) z$qr NULL z} Browse[2]> n debug: ret.x Browse[2]> ndebug: ret.y Browse[2]> ndebug: cl Browse[2]> ndebug: mf FALSE)Browse[2]> ndebug: m "formula", "offset"), names(mf), 0L)Browse[2]> ndebug: mf 1L, m)]Browse[2]> ndebug: mf$drop.unused.levels TRUEBrowse[2]> ndebug: mf[[1L]] Browse[2]> ndebug: mf eval(mf, Browse[2]> nError in eval(predvars, data, env) : 找不到對象'y'調試模式下運行lm(y~x)將打印函數的所有代碼,向提示符Browse[2]>一直輸入n逐行運行,直到找到出錯的那一行。
options(error = recover)#options()設置全局選項,把recover函數設為錯誤處理器read.csv("nosuchfile") #讀取一個不存在的csv文件Error in file(file, "rt") : 無法打開鏈結此外: Warning message:In file(file, "rt") : 無法打開文件'nosuchfile': No such file or directory1: read.csv("nosuchfile")2: read.table(file = file, header = header, sep = sep, quote = quote, dec 3: file(file, "rt")Selection:?報錯后沒有返回控制臺,而是輸入函數調用棧。
?錯誤發生在函數調用棧的第3級,當函數試圖建立文件關聯的時候找不到文件
?輸入數字1、2、3,可以瀏覽函數環境,查看每個調用的函數中都發生了什么
str函數
str 函數可以緊湊地顯示 R 對象的內部結構,可以代替 summary 函數,特別適用于大型列表。
?函數
str(str)function (object, ...)對str函數本身使用,返回函數的所有參數,它需要一個參數,可以是任何R對象。?數值型向量x <- rnorm(100, 2, 4)summary(x) Min. 1st Qu. Median Mean 3rd Qu. Max. -9.9878 -0.6826 2.5642 2.1066 4.7830 11.2853str(x) num [1:100] 2.889 0.892 7.577 -0.636 4.642 ...summary()返回6個概括統計量,粗略說明數據集的范圍和離散情況。
str() 說明 x 是一個數值向量,含有100個元素,及向量 x 的前五個數。
?因子變量f str(f) Factor w/ 40 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...summary(f)?1??2??3??4??5??6??7??8??9?10?11?12?13?14?15?16?17?18?19?20?10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10str()說明變量是因子變量,含有40個水平,各水平名字分別為"1"、"2"、"3"、"4"、……,并輸出變量的前幾個元素。summary()返回每個水平的元素個數,不像 str 函數的輸出那樣緊湊。??數據框
library(datasets)head(airquality) Ozone Solar.R Wind Temp Month Day1 41 190 7.4 67 5 12 36 118 8.0 72 5 23 12 149 12.6 74 5 34 18 313 11.5 62 5 45 NA NA 14.3 56 5 56 28 NA 14.9 66 5 6str(airquality)'data.frame': 153 obs. of 6 variables: $ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ... $ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ... $ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ... $ Temp : int 67 72 74 62 56 66 65 59 61 69 ... $ Month : int 5 5 5 5 5 5 5 5 5 5 ... $ Day : int 1 2 3 4 5 6 7 8 9 10 ...str()說明對象是數據框,有153個觀測值,6個變量,輸出每個變量的一些元素以及變量類型,為整數型變量和數值型變量。
?矩陣
m <- matrix(rnorm(100), 10, 10)str(m) num [1:10, 1:10] -0.483 -0.669 0.513 1.049 0.121 ...str()說明對象是矩陣,有10行10列,并列出前幾個元素。
?列表
s str(s)List of 5 $ 5:'data.frame': 31 obs. of 6 variables: ..$ Ozone : int [1:31] 41 36 12 18 NA 28 23 19 8 NA ... ..$ Solar.R: int [1:31] 190 118 149 313 NA NA 299 99 19 194 ... ..$ Wind : num [1:31] 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ... ..$ Temp : int [1:31] 67 72 74 62 56 66 65 59 61 69 ... ..$ Month : int [1:31] 5 5 5 5 5 5 5 5 5 5 ... ..$ Day : int [1:31] 1 2 3 4 5 6 7 8 9 10 ... $ 6:'data.frame': 30 obs. of 6 variables: ..$ Ozone : int [1:30] NA NA NA NA NA NA 29 NA 71 39 ... ..$ Solar.R: int [1:30] 286 287 242 186 220 264 127 273 291 323 ... ..$ Wind : num [1:30] 8.6 9.7 16.1 9.2 8.6 14.3 9.7 6.9 13.8 11.5 ... ..$ Temp : int [1:30] 78 74 67 84 85 79 82 87 90 87 ... ..$ Month : int [1:30] 6 6 6 6 6 6 6 6 6 6 ... ..$ Day : int [1:30] 1 2 3 4 5 6 7 8 9 10 ... $ 7:'data.frame': 31 obs. of 6 variables: ..$ Ozone : int [1:31] 135 49 32 NA 64 40 77 97 97 85 ... ..$ Solar.R: int [1:31] 269 248 236 101 175 314 276 267 272 175 ... ..$ Wind : num [1:31] 4.1 9.2 9.2 10.9 4.6 10.9 5.1 6.3 5.7 7.4 ... ..$ Temp : int [1:31] 84 85 81 84 83 83 88 92 92 89 ... ..$ Month : int [1:31] 7 7 7 7 7 7 7 7 7 7 ... ..$ Day : int [1:31] 1 2 3 4 5 6 7 8 9 10 ... $ 8:'data.frame': 31 obs. of 6 variables: ..$ Ozone : int [1:31] 39 9 16 78 35 66 122 89 110 NA ... ..$ Solar.R: int [1:31] 83 24 77 NA NA NA 255 229 207 222 ... ..$ Wind : num [1:31] 6.9 13.8 7.4 6.9 7.4 4.6 4 10.3 8 8.6 ... ..$ Temp : int [1:31] 81 81 82 86 85 87 89 90 90 92 ... ..$ Month : int [1:31] 8 8 8 8 8 8 8 8 8 8 ... ..$ Day : int [1:31] 1 2 3 4 5 6 7 8 9 10 ... $ 9:'data.frame': 30 obs. of 6 variables: ..$ Ozone : int [1:30] 96 78 73 91 47 32 20 23 21 24 ... ..$ Solar.R: int [1:30] 167 197 183 189 95 92 252 220 230 259 ... ..$ Wind : num [1:30] 6.9 5.1 2.8 4.6 7.4 15.5 10.9 10.3 10.9 9.7 ... ..$ Temp : int [1:30] 91 92 93 93 87 84 80 78 75 73 ... ..$ Month : int [1:30] 9 9 9 9 9 9 9 9 9 9 ... ..$ Day : int [1:30] 1 2 3 4 5 6 7 8 9 10 ...通過month變量來分割airquality數據框,對 s 調用str()。可以看到得到一個包含有5個不同的數據框的列表,每個數據框對應特定的月份,5月有6個變量,31個觀測數據。
編輯:李雪純 馮文清校審:張健 羅鵬總結
以上是生活随笔為你收集整理的H G W S哪一个不是状态函数_数据科学05 | R语言程序设计调试工具与str函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年JDK环境配置(超详细)
- 下一篇: log4js 关于 Appender 的