2013-03-02 28 views
9

Chào buổi chiều,Trả lại ký tự được liên kết với mã Ascii được chỉ định trong R

Tôi đang cố gắng tạo một sản phẩm Descartes trong R bằng các chữ cái trong bảng chữ cái.

Những gì tôi đang thực sự cố gắng là thế này:

Trước tiên tôi tạo ra một ma trận với các chữ cái

a <- as.matrix(seq(97,122,by=1)) 

Sau đó, tôi tạo ra một khung dữ liệu với 2 cột với tất cả các kết hợp

b <- expand.grid(a, a) 

Cuối cùng, tôi kết hợp 2 cột

apply(b,1,paste,collapse=" ") 

Vấn đề tôi gặp phải là tôi không thể tìm ra cách để biến những "số thập phân" đó thành ký tự Ascii của nó.

Tôi đã thử một vài thứ như rawToChar và gsub không thành công.

Ai đó có thể chỉ cho tôi đúng hướng không?

Cảm ơn

+1

tại sao bạn không trực tiếp sử dụng 'ký tự'? – Arun

Trả lời

2

phương pháp trực tiếp đầu tiên:

res <- do.call(paste, expand.grid(letters, letters)) 

Nếu bạn đã một số giá trị ascii khác và bạn muốn để có được nhân vật tương đương:

val <- 65:96 # whatever values you want the equivalent characters for 
mode(val) <- "raw" # set mode to raw 
# alternatively, val <- as.raw(65:96) 
a <- sapply(val, rawToChar) 
res <- do.call(paste, expand.grid(a, a)) 
+1

Điều đó làm việc tuyệt vời Arun. Cảm ơn nhiều! – Diego

+1

Cố gắng tránh gọi biến 'c'. – Dason

+0

@Dason, vâng. cảm ơn vì đã chỉ ra. Tôi đã chỉnh sửa. – Arun

1

Để in một char ASCII trong R bạn có thể sử dụng chức năng print với một dấu chéo ngược \ trước khi một số mã ASCII. Ví dụ để in ký tự tương đương với 150 sử dụng print("\150").

Hoặc ví dụ của bạn ở trên, bạn có thể thử:

a <- sapply(97:122,function(x) rawToChar(as.raw(x))) 

b <- expand.grid(a,a) 

c <- t(apply(b,1,function(x) paste(x[1],x[2]))) 
+0

Cảm ơn Gary. Không, những gì tôi cần là "Thay thế" các giá trị số trong một khung dữ liệu cho các chữ cái tương ứng của chúng, để sử dụng chúng bên trong mã. Cảm ơn một lần nữa. – Diego

+0

Tôi đồng ý với @Arun, có lẽ dễ dàng hơn khi chỉ sử dụng chữ ', nhưng tôi sẽ cập nhật ví dụ của tôi với những gì bạn đã nói. –

+0

Cảm ơn Gary. Tôi đã thử điều đó, nhưng nó không làm những gì tôi cần. Nó trả về 2 biến nhưng không trả về sản phẩm của họ. – Diego

14

Cách rất dễ dàng để trả về một ký tự dựa trên mã ASCII của nó là hàm intToUtf8. Nó cũng hoạt động cho các vectơ bao gồm nhiều số nguyên và trả về các ký tự tương ứng dưới dạng một chuỗi.

vec <- 97:122 
intToUtf8(vec) 
# [1] "abcdefghijklmnopqrstuvwxyz" 

intToUtf8(65) 
# [1] "A" 
Các vấn đề liên quan