Tôi đang viết một gói R trong đó mã R nói chuyện với một ứng dụng Java. Ứng dụng Java đưa ra một chuỗi định dạng CSV và tôi muốn mã R có thể đọc trực tiếp chuỗi và chuyển đổi nó thành một tệp dữ liệu.Có cách nào để sử dụng read.csv để đọc từ một chuỗi giá trị chứ không phải là tệp trong R?
Trả lời
Vâng, nhìn vào sự giúp đỡ cho textConnection()
- các rất mạnh mẽ khái niệm trong R là về cơ bản tất cả các độc giả (như ví dụ read.table()
và các biến thể của nó) truy cập vào các kết nối đối tượng có thể là một tập tin, hoặc từ xa URL hoặc một đường ống đến từ một ứng dụng khác hoặc ... một số văn bản như trong trường hợp của bạn.
Bí quyết tương tự được sử dụng cho cái gọi là ở đây các tài liệu:
> lines <- "
+ flim,flam
+ 1.2,2.2
+ 77.1,3.14
+ "
> con <- textConnection(lines)
> data <- read.csv(con)
> close(con)
> data
flim flam
1 1.2 2.20
2 77.1 3.14
>
Lưu ý rằng đây là một đơn giản cách để xây dựng một cái gì đó nhưng nó cũng là tốn kém do sự phân tích cú pháp lặp đi lặp lại của tất cả các dữ liệu. Có nhiều cách khác để chuyển từ Java sang R, nhưng điều này sẽ giúp bạn đi nhanh chóng. Hiệu quả đến tiếp theo ...
Sửa đổi một câu trả lời cũ 7 năm: Bởi bây giờ, đây là nhiều nhờ đơn giản để lập luận text=
mà đã được thêm vào read.csv()
và giống nhau:
R> data <- read.csv(text="flim,flam
+ 1.2,2.2
+ 77.1,3.14")
R> data
flim flam
1 1.2 2.20
2 77.1 3.14
R>
Các phiên bản R gần đây có một cơ chế đơn giản hơn, hãy xem câu trả lời của @Adam Bradley trong chủ đề này: http://stackoverflow.com/a/16349171/17523 –
Vâng. Ví dụ:
string <- "this,will,be\na,data,frame"
x <- read.csv(con <- textConnection(string), header=FALSE)
close(con)
#> x
# V1 V2 V3
#1 this will be
#2 a data frame
Giả sử bạn có một tập tin gọi tommy.csv (có, giàu trí tưởng tượng, tôi biết ...) có các nội dung của
col1 col2 \ n 1 1 \ n 2 2 \ n 3 3
trong đó mỗi dòng được phân tách bằng ký tự thoát "\ n".
Tệp này có thể được đọc với sự trợ giúp của đối số allowEscapes
trong read.table
.
> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)
col1 col2
1 col1 col2
2 1 1
3 2 2
4 3 3
Không hoàn hảo (sửa đổi tên cột ...), nhưng đó là khởi đầu.
Chức năng này kết thúc câu trả lời của Dirk thành một biểu mẫu thuận tiện. Thật tuyệt vời khi trả lời các câu hỏi về SO, nơi người hỏi vừa mới đổ dữ liệu trên màn hình.
text_to_table <- function(text, ...)
{
dfr <- read.table(tc <- textConnection(text), ...)
close(tc)
dfr
}
Để sử dụng, trước tiên hãy sao chép dữ liệu trên màn hình và dán vào trình chỉnh sửa văn bản của bạn.
foo bar baz
1 2 một
3 4 b
Bây giờ quấn nó với text_to_table
, dấu ngoặc kép và bất kỳ đối số khác cho read.table
.
text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)
Lưu ý rằng trong các phiên bản bây giờ hiện hành của R, bạn không còn cần textConnection()
, nó có thể chỉ đơn giản là làm điều này:
> states.str='"State","Abbreviation"
+ "Alabama","AL"
+ "Alaska","AK"
+ "Arizona","AZ"
+ "Arkansas","AR"
+ "California","CA"'
> read.csv(text=states.str)
State Abbreviation
1 Alabama AL
2 Alaska AK
3 Arizona AZ
4 Arkansas AR
5 California CA
Tôi biết chính điều này hơi muộn nhưng - có lẽ có thể hữu ích để gửi điều này như là một chỉnh sửa cho câu trả lời được chấp nhận, vì nó không chắc OP bây giờ sẽ thay đổi câu trả lời chấp nhận, nhưng điều này bây giờ có vẻ là câu trả lời tốt hơn? – obfuscation
IMHO, OP sẽ không chấp nhận câu trả lời được chấp nhận và chấp nhận câu trả lời này ... – Mischa
- 1. Làm cách nào để thêm javascript động vào thẻ đầu từ chuỗi chứ không phải tệp?
- 2. Không thể đọc tệp bằng "#" và không gian bằng cách sử dụng read.table hoặc read.csv trong R
- 3. Nhập tệp csv vào R - giá trị số được đọc là ký tự
- 4. Sử dụng XML Schema để mở rộng một yếu tố chứ không phải là một complexType
- 5. Làm cách nào để đọc từ chuỗi XML trong OpenCV?
- 6. Cách Ant có thể nhận giá trị đọc từ một tệp vào giá trị thuộc tính?
- 7. giá trị số nguyên đọc từ System.in không phải là giá trị được nhập
- 8. Đọc và viết giá trị từ một tệp văn bản bằng cách sử dụng mã vbscript
- 9. Làm cách nào để kiểm tra xem một giá trị có phải là số không?
- 10. Cách kiểm tra xem chuỗi có phải là một trong các giá trị đã biết không?
- 11. Làm thế nào để điều trị chuỗi như là một chuỗi và không phải là một int trong PHP
- 12. Làm cách nào để xác định xem một chuỗi không phải là cụm từ thông dụng?
- 13. Đọc giá trị của một đầu vào sử dụng XPath, sau đó sử dụng trong Greasemonkey
- 14. Tại sao có thể thay đổi giá trị của một trường chỉ đọc chứ không phải của một const sử dụng sự phản chiếu?
- 15. cách để biết chuỗi có phải là base64 hay không
- 16. Làm thế nào để đọc một chuỗi có chứa một '\' bằng cách sử dụng opencsv?
- 17. Làm cách nào để đọc các giá trị trong mảng?
- 18. đọc thẻ EMV bằng PPSE chứ không phải PSE
- 19. Tại sao sử dụng argparse chứ không phải là optparse?
- 20. Thêm một đơn vị để giao diện sử dụng khoản chứ không phải là việc thực hiện sử dụng khoản
- 21. int() lập luận phải là một chuỗi hoặc một số, chứ không phải 'SimpleLazyObject'
- 22. Làm cách nào để xóa ký tự không phải là số từ một chuỗi trong java?
- 23. sử dụng RPATH chứ không phải RUNPATH?
- 24. Làm thế nào để trích xuất một giá trị từ một chuỗi bằng cách sử dụng regex và một vỏ?
- 25. Chức năng PHP nào để sử dụng để đọc một tệp nhị phân thành một chuỗi?
- 26. Làm cách nào để lấy một giá trị số đơn giản từ một vector số có tên trong R?
- 27. Sử dụng R: Làm cách nào để tạo đối tượng chuỗi thời gian có ngày?
- 28. Cách giải quyết "trình vòng lặp phải trả lại chuỗi chứ không phải byte"
- 29. Làm thế nào để đọc một chuỗi giá trị với một delimeter trên Arduino?
- 30. Đọc giá trị đăng ký có chứa khoảng trắng bằng cách sử dụng tệp hàng loạt
bạn có thể sử dụng gói rJava để thay thế? –
Có lẽ bạn có thể fiddle xung quanh với allowEscapes (trong read.table). Chỉ cần đảm bảo đầu ra java sử dụng \ n để ngắt dòng. –
@Joshua Tôi đang sử dụng rJava để nói chuyện với chương trình Java của tôi. Tôi nghĩ sẽ hiệu quả hơn khi chuyển đổi các đối tượng java nặng của tôi thành chuỗi trước khi chuyển nó vào R. –