日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

H G W S哪一个不是状态函数_数据科学05 | R语言程序设计调试工具与str函数

發(fā)布時(shí)間:2024/3/26 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 H G W S哪一个不是状态函数_数据科学05 | R语言程序设计调试工具与str函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

調(diào)試工具debugging tools

?條件condition

用于提示運(yùn)行函數(shù)過(guò)程中意外事件或錯(cuò)誤的發(fā)生,編寫函數(shù)時(shí)可以自行創(chuàng)造新的提示條件。

  • message:由message()產(chǎn)生,輸出提示信息到Console控制臺(tái),不會(huì)阻止函數(shù)運(yùn)行

  • warning:由warning()產(chǎn)生,運(yùn)行過(guò)程出現(xiàn)潛在的問題,函數(shù)繼續(xù)執(zhí)行,完全執(zhí)行后輸出警告

  • error:由stop()產(chǎn)生,運(yùn)行過(guò)程出現(xiàn)重大問題無(wú)法繼續(xù),強(qiáng)制終止運(yùn)行

#warninglog(-1)[1] NaNWarning message:In log(-1) : 產(chǎn)生了NaNs#取一個(gè)負(fù)數(shù)的常用對(duì)數(shù),返回NaN表示非數(shù)字 (Not a number) #errorprintmessage function(x) { if(x>0) print("x is greater than zero") else print("x is less than or equal to zero") invisible(x)} printmessage(1)[1] "x is greater than zero" printmessage(NA)Error in if (x > 0) print("x is greater than zero") else print("x is less than or equal to zero") : 需要TRUE/FALSE值的地方不可以用缺少值

?調(diào)試函數(shù)時(shí)按以下流程考慮問題

1)實(shí)際輸入函數(shù)的是什么?
2)預(yù)期結(jié)果是什么?
3)怎么調(diào)用函數(shù)?參數(shù)是什么?
4)實(shí)際結(jié)果和預(yù)期結(jié)果之間有何區(qū)別?
5)最初的預(yù)期是否正確?
6)能否重塑問題?(如設(shè)定隨機(jī)數(shù)種子,重復(fù)產(chǎn)生問題的過(guò)程)

?R中的調(diào)試工具 ?

  • traceback 函數(shù):打印函數(shù)調(diào)用棧 (function call stack),說(shuō)明一共調(diào)用了多少個(gè)函數(shù),以及錯(cuò)誤發(fā)生的位置

  • debug 函數(shù):傳遞一個(gè)函數(shù)作為參數(shù),可以標(biāo)記這個(gè)函數(shù),進(jìn)入調(diào)試模式(debug mode)

    調(diào)試模式(debug mode):每當(dāng)執(zhí)行到這個(gè)函數(shù)時(shí)都會(huì)暫停執(zhí)行,停在這個(gè)函數(shù)的第一行 ?

  • browser 函數(shù):在代碼的任何地方調(diào)用 browser(),函數(shù)會(huì)停止執(zhí)行,能從那里開始逐行運(yùn)行,找出出現(xiàn)錯(cuò)誤的代碼具體是哪一行

  • trace 函數(shù):trace 函數(shù)允許在函數(shù)中插入調(diào)試代碼,避免了編輯函數(shù)本身

  • recover 函數(shù):R默認(rèn)在報(bào)錯(cuò)之后回到控制臺(tái),通過(guò)設(shè)置錯(cuò)誤處理器 (error handler)可改變這種默認(rèn)行為。recover() 是錯(cuò)誤處理函數(shù),函數(shù)遇到錯(cuò)誤時(shí)R編譯器停止執(zhí)行,但不回到控制臺(tái),會(huì)停在函數(shù)出錯(cuò)的地方,輸出函數(shù)調(diào)用棧。

lm(y~x) Error in eval(expr, envir, enclos) : object ’y’ not foundtraceback()7: eval(expr, envir, enclos)6: eval(predvars, data, env)5: model.frame.default(formula = y ~ x, drop.unused.levels = TRUE)4: model.frame(formula = y ~ x, drop.unused.levels = TRUE)3: eval(expr, envir, enclos)2: eval(mf, parent.frame())1: lm(y~x)

出錯(cuò)在第7層函數(shù),出錯(cuò)原因是它試圖解析公式y(tǒng)~x,eval()在解析公式時(shí)無(wú)法找到 y 和 x 的實(shí)際值。

必須在錯(cuò)誤發(fā)生后馬上調(diào)用 traceback函數(shù),traceback函數(shù)只能給出上一次執(zhí)行的錯(cuò)誤。

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) : 找不到對(duì)象'y'

調(diào)試模式下運(yùn)行l(wèi)m(y~x)將打印函數(shù)的所有代碼,向提示符Browse[2]>一直輸入n逐行運(yùn)行,直到找到出錯(cuò)的那一行。

options(error = recover)#options()設(shè)置全局選項(xiàng),把recover函數(shù)設(shè)為錯(cuò)誤處理器read.csv("nosuchfile") #讀取一個(gè)不存在的csv文件Error in file(file, "rt") : 無(wú)法打開鏈結(jié)此外: Warning message:In file(file, "rt") : 無(wú)法打開文件'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:

?報(bào)錯(cuò)后沒有返回控制臺(tái),而是輸入函數(shù)調(diào)用棧。

?錯(cuò)誤發(fā)生在函數(shù)調(diào)用棧的第3級(jí),當(dāng)函數(shù)試圖建立文件關(guān)聯(lián)的時(shí)候找不到文件

?輸入數(shù)字1、2、3,可以瀏覽函數(shù)環(huán)境,查看每個(gè)調(diào)用的函數(shù)中都發(fā)生了什么

str函數(shù)

str 函數(shù)可以緊湊地顯示 R 對(duì)象的內(nèi)部結(jié)構(gòu),可以代替 summary 函數(shù),特別適用于大型列表。

?函數(shù)

str(str)function (object, ...)對(duì)str函數(shù)本身使用,返回函數(shù)的所有參數(shù),它需要一個(gè)參數(shù),可以是任何R對(duì)象。?數(shù)值型向量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個(gè)概括統(tǒng)計(jì)量,粗略說(shuō)明數(shù)據(jù)集的范圍和離散情況。

str() 說(shuō)明 x 是一個(gè)數(shù)值向量,含有100個(gè)元素,及向量 x 的前五個(gè)數(shù)。

?因子變量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()說(shuō)明變量是因子變量,含有40個(gè)水平,各水平名字分別為"1"、"2"、"3"、"4"、……,并輸出變量的前幾個(gè)元素。summary()返回每個(gè)水平的元素個(gè)數(shù),不像 str 函數(shù)的輸出那樣緊湊。?

?數(shù)據(jù)框

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()說(shuō)明對(duì)象是數(shù)據(jù)框,有153個(gè)觀測(cè)值,6個(gè)變量,輸出每個(gè)變量的一些元素以及變量類型,為整數(shù)型變量和數(shù)值型變量。

?矩陣

m <- matrix(rnorm(100), 10, 10)str(m) num [1:10, 1:10] -0.483 -0.669 0.513 1.049 0.121 ...

str()說(shuō)明對(duì)象是矩陣,有10行10列,并列出前幾個(gè)元素。

?列表

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 ...

通過(guò)month變量來(lái)分割airquality數(shù)據(jù)框,對(duì) s 調(diào)用str()。可以看到得到一個(gè)包含有5個(gè)不同的數(shù)據(jù)框的列表,每個(gè)數(shù)據(jù)框?qū)?yīng)特定的月份,5月有6個(gè)變量,31個(gè)觀測(cè)數(shù)據(jù)。

編輯:李雪純 馮文清校審:張健 羅鵬

總結(jié)

以上是生活随笔為你收集整理的H G W S哪一个不是状态函数_数据科学05 | R语言程序设计调试工具与str函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。