2016-03-31 11 views
4

Veritabanından R'ye bir dize aktardım. Db sütun tipi BYTEA (Postgres) 'dir. Bunu amaçlandığı şekilde kullanabilmem için raw tipinde olmalıdır. Bunun yerine, character tipindedir. Aşağıdaki anlamda ham dönüştürmek istiyorum: Ben charToRaw kullanırsanız, diziye dönüştürülürHam baytları ham bayt olarak al R

\x1f8b080000000000 

dize temsilidir

5c 78 31 66 38 62 30 38 

Onun yerine bunu gerek bu sorunu nasıl karşılarım? Chris

library(RPostgreSQL) 
conn <- dbConnect(dbDriver("PostgreSQL"), dbname = "somename", 
        host = "1.2.3.4", port = 5432, 
        user = "someuser", password = pw) 
some_value <- dbGetQuery(conn, "select value from schema.key_value where key like '%somekey%' limit 1") 

some_value$value 
# [1] "\\x1f8b080000000000000 
+0

Veritabanından almak için kullandığınız kodu paylaşabilir misiniz? – Chris

+1

, Postgres'de ve sonra "charToRaw" da bir kez R'ye geri döndü mü? Postgres'te doğrudan hamle yapmak için daha iyi bir yol olurdu, bunun mümkün olup olmadığından emin olmasa da, – Chris

+0

Tried 'convert_to (value :: text, 'utf-8') değerini schema.key_value ...' '' 'charToRaw '' olarak seçin() 'başarı olmadan. Gerçi cesur bir çaba. – artdv

cevap

3

için

Düzenleme 1. Cevap Bu raws bir vektör tarif ettik türde bir tek karakter dizesi dönüştürmek için çalışıyor.

## The string I think you're talking about 
dat <- "\\x1f8b080000000000" 
cat(dat, "\n") 
## \x1f8b080000000000 

## A function to convert one string to an array of raw 
f <- function(x) { 
    ## Break into two-character segments 
    x <- strsplit(x, "(?<=.{2})", perl=TRUE)[[1]] 
    ## Remove the first element, "\\x" 
    x <- x[-1] 
    ## Complete the conversion 
    as.raw(as.hexmode(x)) 
} 

## Check that it works 
f(dat) 
## [1] 1f 8b 08 00 00 00 00 00 
+0

Bunu yerel bir şekilde yapamayacağımı biraz şaşırıyorum. Gerçekten verimsiz görünüyor. Bunu python ya da bash'ta idare etmeye çalışıyorum. – artdv

+0

@artdv "> \\ x1f ...." gibi dizeleri ham vektörlere dönüştüremez misiniz? Ya da veriyi doğrudan bir veritabanından ham bir vektöre alamayacağınızı düşündünüz mü? Her halükarda, evet, hazırda aldığın bir şeyden hoşlanacağın ve daha rahat kullanacağını kesinlikle tavsiye ederim. –

+0

İkincisi, öncekinden daha fazla. R nesnelerinin ikili sürümlerini bir veritabanında depolamak istiyorsam, istenen yaklaşım nedir? – artdv