Прочитать кортеж из текстового файла и построить график - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть текстовый файл с кортежами целочисленных данных, которые я хочу построить на простом графике.Текстовый файл ("test.txt") выглядит следующим образом.Все кортежи разделены табуляциями.

Текстовый файл (test.txt)

(1,2)        (1,3)         (2,8)       (3,12)       (5,82)       (...)

R-код

m = read.table('test.txt', header = FALSE, sep='\t')
plot(log(m[,1]), log(m[,2]))

В результате я получаю

Error in Math.factor(m[,1]): 'log' not meaningful for factors

Что я могу понять, так это то, что мои кортежи данных не считываются как числовые значения, а как факторы.Соответственно, оператор 'log' не может работать с этими (факторами) значениями.Поэтому моя идея состояла в том, чтобы преобразовать коэффициенты в числовые, но мне не удается преобразовать данные.Кроме того, я не уверен, что это решение моей проблемы.

То, что я хотел бы иметь, это 2d-граф с (x, y) -значениями в качестве оси.

Может быть, у кого-то есть идея, как с этим справиться.

--- EDIT ---

library(readtext)
library(ggplot2)


DATA_DIR <- system.file("extdata/", package = "readtext")

mytab = readtext(paste0(DATA_DIR, "/hlra/*"))
# readtext object consisting of 1 document and 0 docvars.
# # data.frame [1 x 2]
# doc_id                text               
# <chr>                 <chr>              
#   1 sample_tuple_file.txt "\"(1,2), (1,\"..."
mytuple = strsplit(mytab$text, ', ')
mytuple = mytuple[[1]]

substring(mytuple[1], 2, 2) # get x value
substring(mytuple[1], 4, 4) # get y value 

x = c()
y = c()

for (i in 1:length(mytuple)){
   my_x = substring(mytuple[i], 2, 2)
   my_y = substring(mytuple[i], 4, 4)
   x <- c(x, my_x)
   y <- c(y, my_y)
   rm(my_x)
   rm(my_y)
}

mydata = data.frame(x = x, y = y)

ggplot(data = mydata, aes(x = x, y = y)) + 
geom_point()

Итак, я протестировал код выше.Но это не работает для всех данных.Получившийся сюжет просто первое значение.Я реорганизовал свой текстовый файл, поэтому каждый кортеж заканчивается запятой и табуляцией.

заговор из кода выше

Я полностью новичок в R, поэтому я уверен, что пропускаю некоторые явно ошибки в моем коде.Кстати, мне пришлось изменить некоторый код, чтобы он запускался в R-Studio (добавлена ​​недостающая библиотека (ggplot2 и readtext), и изменить файл-каталог.

1 Ответ

0 голосов
/ 13 ноября 2018

Если у вас есть такой текстовый файл:

(1,2)        (1,3)         (2,8)       (3,12)       (5,82)       (...)

Я рекомендую использовать read_text.Работайте с векторами и строками, чтобы подготовить данные в формате, который готов к печати. ​​

#if packages aren't yet included in R import them by using R-console
#Command: install.packages("package-name")
#import library "readtext" 
library(readtext)
#install library "ggplot2"
library(ggplot2)

#get directory from "readtext"-package which is in my case...
#C:\Users\your_name\Documents\R\win-library\3.5\readtext\extdata\your_folder\
DATA_DIR <- system.file("extdata/", package = "readtext")

#the textfile you want to plot should be in folder "your_folder"
mytab = readtext(paste0(DATA_DIR, "your_folder/*")
# readtext object consisting of 1 document and 0 docvars.
# # data.frame [1 x 2]
# doc_id                text               
# <chr>                 <chr>              
#   1 sample_tuple_file.txt "\"(1,2), (1,\"..."

mytuple = strsplit(mytab$text, '\t')
mytuple = mytuple[[1]]

substring(mytuple[1], 2, 2) # get x value
substring(mytuple[1], 4, 4) # get y value 

x = c()
y = c()

for (i in 1:length(mytuple)){
  my_x = substring(mytuple[i], 2, 2)
  my_y = substring(mytuple[i], 4, 4)
  x <- c(x, my_x)
  y <- c(y, my_y)
  rm(my_x)
  rm(my_y)
}

mydata = data.frame(x = x, y = y)

ggplot(data = mydata, aes(x = x, y = y)) + 
  geom_point()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...