在传递给ddply

时间:2016-03-09 01:15:52

标签: r plot plyr

我正在使用ddply在大型数据帧上进行数十次计算密集型分析。数据框由每个受试者的测序数据(第1行=试验1,第2行=试验2等)组成,每个受试者有几个试验块。分析返回我绑定并返回的几个数值度量,但它也返回数据的稀疏矩阵表示,我想将其绘制到文件中。

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中的函数内打开设备?

编辑:一个更简单的例子再现了这个问题。我有一个稀疏矩阵,我想创建它的图像并将其放在一个文件中。

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 个答案:

答案 0 :(得分:0)

MrFlick在上述评论中回答了这个问题。