Я использую ddply для проведения многократно вычислительного анализа десятков раз на большом кадре данных. Кадр данных состоит из секвенированных данных (строка 1 = пробная 1, строка 2 = пробная версия 2 и т. Д.) Для каждого объекта и имеется несколько блоков испытаний для каждого субъекта. Анализ возвращает несколько числовых мер, которые я связываю и возвращаю, но также возвращает разреженное матричное представление данных, которое я хочу записать в файл.Построение внутри функции, переданной в ddply
data <- read.table("data.tsv", header= TRUE)
fqra <- function(x) {
temp <- crqa(as.numeric(x$to.roi), as.numeric(x$to.roi), delay = 1, embed = 1,
rescale = 0, radius = .001, normalize=0,mindiagline = 2, minvertline = 2,
tw=0, whiteline = FALSE, recpt=FALSE, side="upper",
checkl = list(do = FALSE, thrshd = 3, datatype = "categorical",
pad = FALSE))
directory = "~/TS14data/Plots/"
a = paste(directory, as.character(x$sid[1]), as.character(x$game.num[1]), ".png",sep="_")
png(filename = a)
b<- image(temp$RP)
dev.off()
return(cbind(temp$RR, temp$DET, temp$NRLINE, temp$maxL,
temp$L, temp$ENTR, temp$rENTR, temp$LAM, temp$TT))
}
results <- ddply(Eyedatdata, .(subject, block), fqra)
код работает без ошибок, и дает мне мои результаты по теме и блок без каких-либо проблем, но участки нигде не найти. Это проблема с тем, как работает plyr? Могу ли я открыть устройство внутри функции внутри ddply?
EDIT: Простой пример воспроизводит эту проблему. У меня есть разреженная матрица, и я хочу создать образ этого файла и поместить его в файл.
library(matrix)
f<-function(x) {
T2 <- new("dgTMatrix", i = as.integer(c(1,1,0,3,3)), j = as.integer(c(2,2,4,0,0)), x=10*1:5, Dim=4:5)
png("example.png");
image(T2)
dev.off()
}
results<-ddply(mtcars, .(gear), f)
Снятие всего внутри функции и ее выполнение независимо создает участок «example.png». То, что, похоже, происходит, заключается в том, что изображение (T2) не выводится в файл из вызова ddply. Я понятия не имею, почему это произойдет.
Это поможет, если вы сделали более [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) с образцами входных данных, которые удаляют сложность, не относящаяся к вашему вопросу. Этот простой пример работает для меня: 'f <-функция (x) {png (paste0 (« передача - », x $ gear [1],« .png »)); plot (drat ~ qsec, x); dev.off(); x}; результаты <- .ddply (mtcars,. (gear), f) '(файлы создаются в рабочем каталоге). Это заставляет меня думать, что можно открыть устройство и написать в plyr-вызове. – MrFlick
Изменив код выше, чтобы сделать график (temp $ RP), а не изображение (temp $ RP), это действительно создает файл .png с графиком. Однако plot() не представляет эти данные правильно, поэтому я использовал image(). Итак, теперь выясняется, что проблема заключается в том, что график, созданный с помощью функции image(), не попадает в устройство, что вызывает недоумение. Я работаю над тем, чтобы получить воспроизводимый пример. Должно быть сделано в ближайшее время. – Nacre
Измените его на 'print (image (T2))'. Библиотека Matrix (которую вы, по-видимому, используете) переопределяет базовую функцию 'image()' для возврата объекта 'trellis', который должен быть явно« print() »ed – MrFlick