2012-06-19 105 views
2

有一個函數我以前用來獲取R中對象的完整屬性(我之前用它來找出兩個看起來相同的數據框爲什麼失敗了checkEquals RUnit檢查)。獲取R對象的全部屬性

結構(str())和屬性(attributes())看起來完全相同。任何人都可以指出我正確的方向是什麼函數顯示一個對象的完整屬性是好的嗎?

+0

也許這是兩個薄的問題gs由於機器精度或表示不相同而不相同,即使他們認爲這些值足夠相等。我想不出你有什麼功能,但是checkEquals調用了all.equal,它有一個寬容參數。嘗試傳遞一個'容差'值,看看是否讓你的數據幀相等。除此之外,您應該向我們展示'str()'的結果以進一步排除故障 –

+2

您想知道什麼,以及爲什麼要了解它?爲了解釋R-Data Munger Guru,「問我們你想做什麼,而不是你想做什麼。」 –

回答

1
  1. str(任選通過vec.lennhcar.max等參數)要細。例如: -

    > str(mtcars, vec.len=Inf) 
    'data.frame': 32 obs. of 11 variables: 
    $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26 30.4 15.8 19.7 15 21.4 
    $ cyl : num 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4 
    $ disp: num 160 160 108 258 360 225 360 146.7 140.8 167.6 167.6 275.8 275.8 275.8 472 460 440 78.7 75.7 71.1 120.1 318 304 350 400 79 120.3 95.1 351 145 301 121 
    $ hp : num 110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230 66 52 65 97 150 150 245 175 66 91 113 264 175 335 109 
    $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 3.92 3.07 3.07 3.07 2.93 3 3.23 4.08 4.93 4.22 3.7 2.76 3.15 3.73 3.08 4.08 4.43 3.77 4.22 3.62 3.54 4.11 
    $ wt : num 2.62 2.88 2.32 3.21 3.44 3.46 3.57 3.19 3.15 3.44 3.44 4.07 3.73 3.78 5.25 5.42 5.34 2.2 1.61 1.83 2.46 3.52 3.44 3.84 3.85 1.94 2.14 1.51 3.17 2.77 3.57 2.78 
    $ qsec: num 16.5 17 18.6 19.4 17 20.2 15.8 20 22.9 18.3 18.9 17.4 17.6 18 18 17.8 17.4 19.5 18.5 19.9 20 16.9 17.3 15.4 17.1 18.9 16.7 16.9 14.5 15.5 14.6 18.6 
    $ vs : num 0 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 0 0 0 1 
    $ am : num 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 
    $ gear: num 4 4 4 3 3 3 3 4 4 4 4 3 3 3 3 3 3 4 4 4 3 3 3 3 3 4 5 5 5 5 5 4 
    $ carb: num 4 4 1 1 2 1 4 2 2 4 4 3 3 3 4 4 4 1 2 1 1 2 2 4 2 1 2 2 4 6 8 2 
    
  2. 我你要比較的兩個R從線到線的對象,你可以嘗試diff的兩個對象的dput版版本。

    > dput(mtcars, file = 'mtcars') 
    > mtcars2 <- mtcars 
    > mtcars2$am <- 0 
    > dput(mtcars2, file = 'mtcars2') 
    > system('diff mtcars mtcars2') 
    23,25c23,25 
    <  0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1), am = c(1, 
    <  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
    <  0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1), gear = c(4, 4, 4, 3, 
    --- 
    >  0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1), am = c(0, 
    >  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    >  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), gear = c(4, 4, 4, 3, 
    
  3. 另一種方法可能是檢查的對象或其部分小例子的哈希值:

    > library(digest) 
    > apply(mtcars, 2, digest) 
               mpg        cyl 
    "6b33fae3fd79bb2081e21798c7001c1f" "fb8453e241dd708f9b17c412e94ab884" 
               disp         hp 
    "feae4e282905d11380533c3cfa3fa997" "2afa2fea47856dc4fa23eb543f1d08a4" 
               drat         wt 
    "345237ccc9e9b4f523ccdfde31e2f7c5" "558e5730ef0af2f50f23fe86363855ed" 
               qsec         vs 
    "e777220d1d85545fd98767bb39f10967" "16ff5701471198a294b5c45a90dad3ca" 
               am        gear 
    "abf0f4ab68322a6dd0fc078570892202" "7f9bb11d36a531de7ab0d6e71fd532c9" 
               carb 
    "793a7b0812e7597d508be29fc432ff49" 
    

    在這裏,您將獲得每列的散列mtcars這可能與被比較類似的數據幀,並查看哪些列不同,例如:

    > apply(mtcars, 2, digest) == apply(mtcars2, 2, digest) 
        mpg cyl disp hp drat wt qsec vs am gear carb 
    TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE