2016-03-09 5 views
0

Я использую 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. Я понятия не имею, почему это произойдет.

+1

Это поможет, если вы сделали более [воспроизводимый пример] (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

+0

Изменив код выше, чтобы сделать график (temp $ RP), а не изображение (temp $ RP), это действительно создает файл .png с графиком. Однако plot() не представляет эти данные правильно, поэтому я использовал image(). Итак, теперь выясняется, что проблема заключается в том, что график, созданный с помощью функции image(), не попадает в устройство, что вызывает недоумение. Я работаю над тем, чтобы получить воспроизводимый пример. Должно быть сделано в ближайшее время. – Nacre

+1

Измените его на 'print (image (T2))'. Библиотека Matrix (которую вы, по-видимому, используете) переопределяет базовую функцию 'image()' для возврата объекта 'trellis', который должен быть явно« print() »ed – MrFlick

ответ

0

Этот вопрос возник из stackoverflow.com Вопрос по MrFlick.

+0

Не стесняйтесь приложить решение, которое вы в конечном счете используете здесь, а затем принять ответ. – MrFlick