R kodunun bir Java uygulamasıyla konuştuğu bir R paketi yazıyorum. Java uygulaması, CSV formatlı bir dize çıkarır ve R kodunun dizeyi doğrudan okuyup bir data.frame'e dönüştürebilmesini istiyorum.
R kodunun bir Java uygulamasıyla konuştuğu bir R paketi yazıyorum. Java uygulaması, CSV formatlı bir dize çıkarır ve R kodunun dizeyi doğrudan okuyup bir data.frame'e dönüştürebilmesini istiyorum.
Yanıtlar:
7 yıllık bir cevabı düzenlemek: Şimdiye kadartext=
, eklenen read.csv()
ve benzeri argüman sayesinde bu çok daha basit :
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>
Evet, yardıma bakın textConnection()
- R'deki çok güçlü fikir, esasen tüm okuyucuların (örneğin read.table()
ve varyantları gibi) bir dosya veya uzak bir URL veya başka bir uygulamadan gelen bir boru olabilen bu bağlantı nesnesine erişmesidir. veya ... sizin durumunuzdaki gibi bir metin.
Aynı numara burada sözde belgeler için kullanılır:
> 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
>
Bunun bir şeyler inşa etmenin basit bir yolu olduğunu, ancak tüm verilerin tekrar tekrar ayrıştırılması nedeniyle de maliyetli olduğunu unutmayın. Java'dan R'ye gitmenin başka yolları da var, ancak bu hızlı bir şekilde ilerlemenizi sağlayacaktır. Verimlilik sonra gelir ...
R'nin şu anki sürümlerinde artık ihtiyacınız olmadığına dikkat edin textConnection()
, bunu basitçe yapmanız mümkün:
> 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
Evet. Örneğin:
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 adında (evet, yaratıcı, biliyorum ...) ve içeriğine sahip bir dosyanız olduğunu varsayalım.
col1 col2 \ n 1 1 \ n 2 2 \ n 3 3
burada her satır bir çıkış karakteri "\ n" ile ayrılmıştır.
Bu dosya, içindeki allowEscapes
argüman yardımıyla okunabilir read.table
.
> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)
col1 col2
1 col1 col2
2 1 1
3 2 2
4 3 3
Mükemmel değil (sütun adlarını değiştirin ...), ama bu bir başlangıç.
Düzenli bir yaklaşım kullanarak, yalnızca bir metin değeri belirtebilirsiniz
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
Bu işlev, Dirk'in yanıtını uygun bir biçime dönüştürür. Soruyu soran kişinin ekrandaki verileri döktüğü SO'daki soruları yanıtlamak için harika.
text_to_table <- function(text, ...)
{
dfr <- read.table(tc <- textConnection(text), ...)
close(tc)
dfr
}
Kullanmak için önce ekrandaki verileri kopyalayın ve metin düzenleyicinize yapıştırın.
foo bar baz
1 2 a
3 4 b
Şimdi text_to_table
, tırnak işaretleri ve diğer argümanlarla sarın read.table
.
text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)