有没有办法使用read.csv读取string值而不是R中的文件?

我正在编写一个R程序包,其中的R代码与Java应用程序交谈。 Java应用程序输出CSV格式的string,我希望R代码能够直接读取string并将其转换为data.frame。

是的,看看textConnection()的帮助 – R中非常强大的概念是,基本上所有的读者(例如read.table()及其变体)都可以访问这些连接对象,这可能是一个文件或远程URL,或从另一个应用程序进来的pipe道,或…一些文本,在你的情况。

这里所谓的文件使用了相同的技巧:

 > 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 > 

请注意,这是构build一些东西的一个简单方法,但由于重复parsing所有数据,这也是代价高昂的。 还有其他的方法可以从Java到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> 

请注意,在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”分隔。

这个文件可以在read.tableallowEscapes参数的帮助下读取。

 > read.table("tommy.csv", header = TRUE, allowEscapes = TRUE) col1 col2 1 col1 col2 2 1 1 3 2 2 4 3 3 

这并不完美(修改列名…),但这是一个开始。

这个函数将Dirk的答案包装成一个方便的forms。 回答关于SO的问题,提问者只是在屏幕上倾倒数据,这是非常棒的。

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

要使用它,首先复制屏幕上的数据并粘贴到您的文本编辑器。

foo吧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)