2017-10-25 9 views
6

से इकाइयों निकाला जा रहा है का उपयोग करते हुए units पैकेज मैं शारीरिक इकाइयों के साथ एक वेक्टर बना सकते हैं, उदाहरण के लिए:एक अनुसंधान वेक्टर

library(units) 
a = 1:10 
units(a) <- with(ud_units, m/s) 
a 
## Units: m/s 
## [1] 1 2 3 4 5 6 7 8 9 10 

लेकिन कैसे मैं वापस एक सादे आर वेक्टर इकाइयों के बिना मिलता है?

unclass(a) कार्य की सबसे करता है, लेकिन वेक्टर में विशेषताओं का एक गुच्छा छोड़ देता है:

unclass(a) 
## [1] 1 2 3 4 5 6 7 8 9 10 
## attr(,"units") 
## $numerator 
## [1] "m" 
## 
## $denominator 
## [1] "s" 
## 
## attr(,"class") 
## [1] "symbolic_units" 

लेकिन मैं एक आसान तरीका होना चाहिए लग रहा है। unitless के रूप में असाइन करने में सहायता नहीं होती है, यह "यूनिटलेस" इकाइयों के साथ एक वेक्टर बनाता है। शब्दचित्र या तो में

कुछ भी नहीं है ...

+9

'as.vector (क)' काम करने के लिए बनाया जा सकता है? – Sotos

+2

यह भी लिंक करना: http://r.789695.n4.nabble.com/function-to-remove-attributes-td914615.html तो एक विकल्प 'विशेषताएँ (ए) = NULL' है, हालांकि '? As। वेक्टर' का सुझाव है कि यह विशेष रूप से इस उद्देश्य के लिए – MichaelChirico

+1

'as.integer' भी –

उत्तर

2

आप उपयोग कर सकते हैं as.vector :)

या अधिक होने की सामान्य:

clean_units <- function(x){ 
    attr(x,"units") <- NULL 
    class(x) <- setdiff(class(x),"units") 
    x 
} 

a <- clean_units(a) 
# [1] 1 2 3 4 5 6 7 8 9 10 
str(a) 
# int [1:10] 1 2 3 4 5 6 7 8 9 10 
+0

आह, क्योंकि matrices इकाइयों भी हो सकता है। – Spacedman

1

as.vector इस मामले में काम करना चाहिए:


library(units)     
a = 1:10      
units(a) <- with(ud_units, m/s) 
a        
#> Units: m/s 
#> [1] 1 2 3 4 5 6 7 8 9 10 
str(a)       
#> Class 'units' atomic [1:10] 1 2 3 4 5 6 7 8 9 10 
#> ..- attr(*, "units")=List of 2 
#> .. ..$ numerator : chr "m" 
#> .. ..$ denominator: chr "s" 
#> .. ..- attr(*, "class")= chr "symbolic_units" 

b = as.vector(a)    
str(b)       
#> int [1:10] 1 2 3 4 5 6 7 8 9 10 
0

मैं as.vector लगता है मैट्रिक्स के साथ भी

#DATA 
set.seed(42) 
m = set_units(matrix(rnorm(4), 2), m/s) 
m 
#Units: m/s 
#   [,1]  [,2] 
#[1,] 1.3709584 0.3631284 
#[2,] -0.5646982 0.6328626 

class(m) 
#[1] "units" 

foo = function(x){ 
    y = as.vector(x) 
    dim(y) = dim(x) 
    return(y) 
} 

foo(m) 
#   [,1]  [,2] 
#[1,] 1.3709584 0.3631284 
#[2,] -0.5646982 0.6328626 

class(foo(m)) 
#[1] "matrix" 

foo(a) 
# [1] 1 2 3 4 5 6 7 8 9 10 

class(foo(a)) 
#[1] "integer" 
+0

समस्या यह है कि यह अपने गुणों की वस्तु को बंद कर देता है जो यूनिट रूपांतरण से पहले या बाद में जोड़ा जा सकता है, और संभावित अतिरिक्त कक्षाओं, जिन्हें रूपांतरण से पहले जोड़ा नहीं जा सकता है ('set_units' इसे पसंद नहीं करता है) लेकिन हो सकता है बाद में जोड़ा जाना चाहिए। –

संबंधित मुद्दे