[r] R의 파일이 아닌 문자열 값에서 읽기 위해 read.csv를 사용하는 방법이 있습니까?

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


답변

예. 예를 들면 :

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


답변

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)


답변