R语言 在传递给ddply的函数内部绘图

hc8w905p  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(120)

我正在使用ddply对一个大 Dataframe 进行数十次计算密集型分析。 Dataframe 由序列数据组成(行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”图。似乎发生的是image(T2)没有从ddply调用中输出到文件。我不知道为什么会发生这种情况。

qjp7pelc

qjp7pelc1#

这个问题在MrFlick的评论中得到了回答:
Matrix库(您显然正在使用)覆盖了默认的基本image()函数,以返回一个trellis对象,该对象需要显式地被print()编辑。

相关问题