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


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

5 70

5 ответов:

редактирование 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() -- the очень мощный понятие в 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

Предположим, у вас есть файл с именем Томми.csv (да, творческий, я знаю...), который имеет содержание

столбец col1 и col2 \П 1 1 \п 2 2 \н 3 3

где каждая строка разделена escape-символом "\n".

этот файл можно прочитать с помощью

эта функция обертывает ответ Дирка в удобную форму. Это блестяще для ответов на вопросы о 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)