2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2, 3, 4
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 16:35 
Alm99 в сообщении #1541115 писал(а):
поскольку в каждом случае, размерность разная, как вывести эти 54 графика на одном


Есть такой приём: один раз определить наиболее широкий диапазон значений и создать график:
plot(0, 0, xlim = c(xmin, xmax), ylim = c(ymin, ymax))

После чего добавлять к этому графику точки и/или линии при помощи points() или lines() (или matplot(..., add = TRUE)).

Либо воспользоваться графической системой lattice или ggplot2, которые говорят на языке data.frame'ов с небольшим количеством столбцов (например, столбец x, столбец y, столбец "категория"), но это отдельная история.

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 16:49 
aitap
А добавлять в цикле? Потому что он то мне только последний отображает:

Код:
plot(0, 0, xlim = c(1, 70), ylim = c(0, 0.048))
fot (i in 1:54)
lines(steps <-c(1:length(dfL1_F[[i]])), dfL1_F[[i]],
     type= "o",pch=16, lty=1, xlab = 'Step finals', ylab = '')

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 17:03 
Забыл сказать: plot(0, 0, xlim = ..., ylim = ..., type = 'n'), чтобы точка в 0,0 не получалась.

Попробуйте пройти свой код по шагам в отладчике или запустить элементы цикла вручную для первых двух итераций. Должно работать, если исправить опечатку в ключевом слове for. Убедитесь, что dfL1_F[[i]] содержат то, что Вы ожидаете там найти. Убедитесь, что диапазон значений (в частности, по $y$) задан правильно.

Не имея Ваших данных и кода, который у Вас запускается (а не падает с синтаксической ошибкой), я всё равно не могу узнать, что именно идёт не так.

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 17:46 
aitap
про for я здесь опечатался, а так да, надо смотреть, те ли данные получены или нет. А каким образом можно для 54 графиков задать цветовую палитру, не прибегая к ggplot2, lattice?

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 18:09 
Alm99 в сообщении #1541132 писал(а):
А каким образом можно для 54 графиков задать цветовую палитру

lines() принимает аргумент col=. Сгенерировать 54 достаточно разных цвета, скорее всего, не получится, но можно получить цветовую гамму функцией rainbow() или hcl.colors() или сгенерировать цвета вручную при помощи чего-то вроде hcl(seq(0, 360*53/54, len = 54), l = 50).

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 20:45 
aitap

И еще такой вопрос: если мне нужны только определенные индексы, для того чтобы печатать на графике данные только из определенных файлов, как мне задать эти индексы:

Код:
assemble <- seq(2,3,10,11,14,16,17,26,27,28,30,31,33,34,35,38,43,45,49)
par(mfrow=c(5,1))
par(new=TRUE)
par(las = 1)

plot(0, 0, xlim = c(15, 130), ylim = c(0, 0.05),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfL_F[[assemble]])), dfL_F[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

plot(0, 0, xlim = c(15, 130), ylim = c(0, 0.05),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfL_RMF[[assemble]])), dfL_RMF[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

plot(0, 0, xlim = c(15, 130), ylim = c(0, 0.05),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfL_D[[assemble]])), dfL_D[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

plot(0, 0, xlim = c(15, 130), ylim = c(0, 0.05),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfL_RMD[[assemble]])), dfL_RMD[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

plot(0, 0, xlim = c(15, 130), ylim = c(0, 28),type = 'n')
for (i in assemble){
lines(steps <-c(1:length(dfQ[[assemble]])), dfQ[[assemble]],
     type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")
abline(h=c(0.000450), lwd=1.5, lty=1, col="red")
mtext("MAX F", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}


Данный вариант не работает:

Код:
Ошибка в dfL_F[[assemble]] :
  на уровне 2 рекурсивная индексация не удалась

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 21:08 
Alm99 в сообщении #1541149 писал(а):
не работает

А почему он не работает? Потому что ошибка возникает при попытке выполнить dfL_F[[assemble]]. Почему возникает ошибка? Либо dfL_F не подходит к assemble, либо assemble не подходит к dfL_F. Что находится в переменной dfL_F? Что находится в переменной assemble? А что должно там находиться?

Я не знаю, как этому научить, но обычно такого рода проблему помогает поделить на части, после чего каждую часть внимательно осмотреть. Если программа "должна" работать, но на деле не работает, какое-то из сделанных программистом предположений неверно. Программисту виднее, что он(а) предполагает; надо сесть и проверить каждое. Я не знаю, что находится в обеих переменных и что на самом деле имелось в виду.

Подсказки:

Добавлено: Используйте traceback(), чтобы увидеть стек вызовов на момент возникновения ошибки (вместе с номерами строк!). options(error = recover) запустит browser() на любом из уровней стека вызовов и позволит интерактивно посмотреть на все значения переменных на момент ошибки. (options(error = NULL) вернёт всё как было.) Не стесняйтесь запускать ?функция для функций, которыми пользуетесь.

Оператор [[ применяется для того, чтобы вытащить из списка ровно один элемент. Если требуется получить "срез" списка, содержащий несколько элементов, нужно использовать оператор [. Возвращаемое значение тоже будет списком.

Alm99 в сообщении #1541149 писал(а):
assemble <- seq(2,3,10,11,14,16,17,26,27,28,30,31,33,34,35,38,43,45,49)

Этот код возвращает другую ошибку.
Alm99 в сообщении #1541149 писал(а):
for (i in assemble)
lines(steps <-c(1:length(dfL_F[[assemble]])), dfL_F[[assemble]],
type= "o",pch=16,lwd=0.5, lty=3, xlab = 'Step finals', ylab = '',cex = 0.6,
col = "springgreen4")

По какой переменной идёт цикл? Какая переменная в цикле пробегает значения? Какая из них должна использоваться в теле цикла?

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 21:30 
aitap
В переменной хранятся значения из файлов, которые извлекаются с помощью данной функции:

Код:
# функция подготовки и чтения данных из файлов

my_fl <- list.files(pattern = ".*.out")
my_fl_s <- (str_sort(my_fl, numeric = TRUE))
df_out <- list()
for (i in seq_along(my_fl)) {
    df_out[[i]] <- readLines(my_fl_s[i])
}


dfL_F <- list()
for (j in seq_along(my_fl_s))
dfL_F[[j]] <- sapply( get.tables(df_out[[j]]),
function(x) subset(x, row.names == 'Maximum' & Item == 'Force')$Value)


Если переменная i будет идти просто от 1 до 54, то все будет нормально и построиь 54 кривые, а как сделать так, чтобы он строил только кривые, где индексом является каждое число из
Код:
2,3,10,11,14,16,17,26,27,28,30,31,33,34,35,38,43,45,49

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение30.11.2021, 21:43 
У Вас был цикл
Alm99 в сообщении #1541120 писал(а):
for (i in 1:54)
, внутри которого Вы обращались к dfL1_F[[i]].

К чему нужно обращаться внутри цикла
Alm99 в сообщении #1541149 писал(а):
for (i in assemble)
?

Вы можете справляться с такого рода проблемами самостоятельно, если подойдёте к ним более систематично. Например, можно было написать 2 цикла:
for (i in 1:54) print(i)
for (i in assemble) print(assemble)
и сравнить, что они печатают. Или ответить на мои вопросы.

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 00:09 
aitap
Действительно, посмотрел, что выводят, но в любом случае не понимаю, он графики строит, но только 10, вместо 19, не понимаю, почему.Так то я выводом на печать посмотрел, да, если передавать 19 номеров, и обращаться как написано ниже, то для i файла соответствующего параметра он выводит численные значения, просто почему не все линии отображаются на графике - количество добавляемых линий на график может же быть большим...

Код:
par(las = 1)
cl <- rainbow(19)
plot(0, 0, xlim = c(10, 130), ylim = c(0, 0.01),xlab = 'Число шагов',
, ylab = '',type = 'n')
for (i in 1:19){
lines(steps <-c(1:length(dfL_F[[assemble[i]]])), dfL_F[[assemble[i]]],
     type= "o",pch=16,lwd=0.4, lty=3, xlab = 'Число шагов', ylab = '',cex = 0.6,
col = cl[i])
abline(h=c(0.000450), lwd=1.5, lty=1, col="black")
mtext("MAX F A.U.", col = "black", adj=-0.1, padj=+0.1, cex=0.8)
grid(nx = NULL, ny = NULL,lty = 2, col = "gray", lwd = 1)
}

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 11:27 
Alm99 в сообщении #1541174 писал(а):
он графики строит, но только 10, вместо 19, не понимаю, почему.

Вы уже пробовали пройти цикл вручную или в отладчике?

Попробуйте временно внести следующие изменения в код:

  1. перед циклом добавить вызов par(mfrow = c(4, 5))
  2. внести plot(0, 0, ...) внутрь цикла, и добавить к нему аргумент main = paste(i, assemble[i])

Выполните код. 19 графиков будут нарисованы отдельно друг от друга и пронумерованы. Какие из них ничего не содержат? Что находится в соответствующих им dfL_F[[assemble[i]]]?

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 12:05 
aitap
Да, прошелся я по циклу, и визуализировал отдельно каждый график... А потом снова вместе. Сейчас он вывел все требуемые графики. Скорее всего, может в рабочем пространстве были лишние данные, сейчас в переменной dfL_F[[assemble[i]]] записаны правильные значения. Так что теперь, все строится как надо! Безмерно благодарен Вам! Скажите пожалуйста, а Вы по R какую литературу брали, ну или можете посоветовать?

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 13:14 
"Наглядная статистика. Используем R!" А. Шипунова, возможно, лучшая книга по R на русском (из известных мне). Joseph Adler - "R in a nutshell" и Richard Cotton - "Learning R" приблизительно эквивалентны и найдутся в библиотеке Genesis. Patrick Burns - The R Inferno рассказывает о том, что обычно идёт не так в программах на R. Из Winston Chang - R Graphics Cookbook и Paul Teetor - R Cookbook можно стащить готовые идеи для своего кода, что изредка бывает полезно. Книги самих авторов R (например, Peter Dalgaard - Introductory Statistics with R) больше по статистике, чем по языку R.

Книги Hadley Wickham рассказывают о продвигаемом RStudio, PBC диалекте R под названием tidyverse, популярном в некоторых кругах. Идиомы tidyverse и "стандартного R" редко похожи друг на друга. Использовать этот диалект или нет - личный выбор сродни "за какую футбольную команду болеть", столь же болезненно обсуждаемый на некоторых форумах.

 
 
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение01.12.2021, 13:57 
aitap

Хорошо, понял Вас, спасибо!

 
 
 [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3, 4


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group