R 코드가 Java 애플리케이션과 통신하는 R 패키지를 작성 중입니다. Java 애플리케이션은 CSV 형식의 문자열을 출력하고 R 코드가 문자열을 직접 읽고이를 data.frame으로 변환 할 수 있기를 원합니다.
R 코드가 Java 애플리케이션과 통신하는 R 패키지를 작성 중입니다. Java 애플리케이션은 CSV 형식의 문자열을 출력하고 R 코드가 문자열을 직접 읽고이를 data.frame으로 변환 할 수 있기를 원합니다.
답변:
7 년 된 답변 편집 : 지금 까지는 다음 과 같이 추가 된 인수 덕분에 훨씬 간단합니다 .text=
read.csv()
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>
예, 도움말을보십시오. R textConnection()
의 매우 강력한 개념은 본질적으로 모든 독자 (예 : read.table()
및 그 변형) 가 파일, 원격 URL 또는 다른 앱에서 들어오는 파이프 일 수있는 이러한 연결 개체에 액세스 한다는 것입니다. , 또는 ... 귀하의 경우와 같은 일부 텍스트.
소위 여기 문서에도 동일한 트릭이 사용됩니다.
> 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
>
이것은 무언가를 구축 하는 간단한 방법이지만 모든 데이터의 반복적 인 구문 분석으로 인해 비용이 많이 듭니다 . Java에서 R로 이동하는 다른 방법이 있지만 이렇게하면 빠르게 진행할 수 있습니다. 효율성이 다음으로 나옵니다 ...
현재 최신 버전의 R에서는 더 이상이 필요하지 않으며 다음 textConnection()
과 같이 간단하게 수행 할 수 있습니다.
> 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
tommy.csv (예, 상상력이 풍부합니다 ...)라는 파일이 있다고 가정합니다.
col1 col2 \ n 1 1 \ n 2 2 \ n 3 3
여기서 각 줄은 이스케이프 문자 "\ n"으로 구분됩니다.
이 파일은의 allowEscapes
인수를 사용하여 읽을 수 있습니다 read.table
.
> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)
col1 col2
1 col1 col2
2 1 1
3 2 2
4 3 3
완벽하지는 않지만 (열 이름 수정 ...) 시작일뿐입니다.
깔끔한 접근 방식을 사용하면 텍스트 값만 지정할 수 있습니다.
library(readr)
read_csv(file = "col1, col2\nfoo, 1\nbar, 2")
# A tibble: 2 x 2
col1 col2
<chr> <dbl>
1 foo 1
2 bar 2
이 함수는 Dirk의 대답을 편리한 형식으로 포장합니다. 질문자가 화면에 데이터를 방금 덤프 한 SO에 대한 질문에 답하는 데 훌륭합니다.
text_to_table <- function(text, ...)
{
dfr <- read.table(tc <- textConnection(text), ...)
close(tc)
dfr
}
이를 사용하려면 먼저 화면 데이터를 복사하여 텍스트 편집기에 붙여 넣으십시오.
foo bar baz
1 2 a
3 4 b
이제 text_to_table
, 따옴표 및 기타 인수로 read.table
.
text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)