Вывод .png для каждой строки data.frame и создание анимации .gif

У меня возникли проблемы с созданием .png из каждой строки фрейма данных.

По сути, я хочу rbind каждую строку от df до coordinate_sys.

Для каждой строки df вместе с coordinate_sys должны быть сгенерированы система координат и один единичный вектор "J", как в это

Наконец, после создания файла .png для каждого unit_vector я хотел бы сделать анимацию .gif.

вот воспроизводимый код моего скрипта;

library(matlib)
library(rgl)
set.seed(12)
x <- runif(10,-0.14,0.1)
y <- runif(10,-0.14,0.1)
z <-sort(runif(10,-0.9,0.9),decreasing=TRUE)
df <- data.frame(x,y,z)


rot <- function(df,out){
  coordinate_sys <- rbind(c(1,0,0),c(0,-1,0),c(0,0,1))
  vec <- rbind(coordinate_sys, unlist(df))
  rownames(vec) <- c("X", "Y", "Z", "J")
  print(vectors3d(vec, col=c(rep("black",3), "red"), lwd=2))
 out <-  png(file="example%02d.png", width=200, height=200)
  dev.off()
}

apply(df, 1,rot,out)

person Alexander    schedule 02.02.2016    source источник
comment
какой смысл минусовать?   -  person Alexander    schedule 02.02.2016
comment
Вы можете попробовать аналогичный этот   -  person akrun    schedule 02.02.2016
comment
@akrun ваш предыдущий ответ был в порядке, за исключением того, что пока ротация не требуется. На каждом графике показан только один вектор J. это все, чего я действительно хочу. В вашем ответе все графики одинаковы, кроме угла поворота.   -  person Alexander    schedule 02.02.2016
comment
Да, именно поэтому я удалил его. Какая-то ошибка в коде.   -  person akrun    schedule 02.02.2016
comment
@akrun Я до сих пор не могу понять, что делать по предоставленной вами ссылке. Моя задача намного отличается от приведенного там примера. Я связываю строки и хочу выполнить функцию для каждой строки. пример построен для всего df.   -  person Alexander    schedule 02.02.2016
comment
Я думаю, вы можете перебрать строки и экспортировать их в один из форматов, упомянутых в ссылке.   -  person akrun    schedule 02.02.2016


Ответы (1)


Вот как далеко я продвинулся:

rot <- function(dat, i){
  coordinate_sys <- rbind(c(1,0,0),c(0,-1,0),c(0,0,1))
  vec <- rbind(coordinate_sys, unlist(dat))
  rownames(vec) <- c("X", "Y", "Z", "J")
  open3d()
  plot3d(1, xlim = c(-1, 1), ylim = c(-1, 1), zlim = c(-1, 1), type = 'n')
  print(vectors3d(vec, col=c(rep("black",3), "red"), lwd=2))
  rgl.snapshot(paste0(letters[i], '.png'))
  rgl.close()
}

mapply(rot, split(df, 1:nrow(df)), i = 1:nrow(df))

Этот код сгенерирует 10 изображений .png с одним вектором в каждом и стабильной системой координат. (Однако он генерирует предупреждения.)

Теперь мы должны быть в состоянии превратить это в .gif с помощью пакета анимации, но это не работает на моей машине из-за того, что ImageMagick не хочет читать файлы .png (?). Возможно, это сработает на вашем.

library(animation)
im.convert('*.png')
person Axeman    schedule 03.02.2016
comment
Большое спасибо за ваше время и усилия. Я знал, что для создания этого кода нужен продвинутый опыт;) - person Alexander; 03.02.2016