Есть ли способ использовать Read.csv, чтобы прочитать из строкового значения, а не файла в R?

StackOverflow https://stackoverflow.com/questions/3936285

  •  30-09-2019
  •  | 
  •  

Вопрос

Я пишу пакет R, где код R разговаривает с приложением Java. Приложение Java выводит форму отформатированной строки CSV, и я хочу, чтобы код R мог напрямую прочитать строку и преобразовать его в данные.

Это было полезно?

Решение

Редактирование 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> 

Да, посмотрите на помощь для textConnection() - то очень могущественный Понятие в R - это, по сути, все читатели (как, например, 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

Это не идеально (измените имена столбцов ...), но это начало.

Эта функция охватывает ответ Dirk в удобную форму. Он блестящий для ответа на вопросы, где Асяс только что бросил данные на экран.

text_to_table <- function(text, ...)
{
   dfr <- read.table(tc <- textConnection(text), ...)
   close(tc)
   dfr
}

Чтобы использовать его, сначала скопируйте экранные данные и вставьте в ваш текстовый редактор.

Foo Bar Baz.
1 2 а.
3 4 B.

Теперь оберните это с text_to_table, цитаты и любые другие аргументы для read.table.

text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top