当前位置:  开发笔记 > 前端 > 正文

在R中的映射函数中添加列表对象

如何解决《在R中的映射函数中添加列表对象》经验,为你挑选了1个好方法。

我正在创建一个散点图矩阵GGally::ggpairs.我正在使用自定义函数(下面称为my_fn)来创建左下角的非对角线子图.在调用该自定义函数的过程中,有关于计算的每个子图的信息,以及我想要存储以供日后使用的子图.

在下面的示例中,每个h@cID都是具有100个值的int []结构.总共,它在my_fn中创建了10次(对于10个左下角的非对角线子图中的每一个,都会创建一次).我试图将所有这10个h@cID结构存储到listCID列表对象中.

我没有成功使用这种方法,并且我尝试了一些其他变体(例如尝试将listCID输入参数作为输入参数my_fn,或者最终尝试返回它).

我可以h@cID有效地存储十个结构,my_fn以便以后使用吗?我觉得有几个我不完全熟悉的语法问题可以解释为什么我被卡住了,同样如果我没有使用适当的术语,我也很乐意改变这个问题的标题.谢谢!

library(hexbin)
library(GGally)
library(ggplot2)

set.seed(1)

bindata <- data.frame(
    ID = paste0("ID", 1:100), 
    A = rnorm(100), B = rnorm(100), C = rnorm(100), 
    D = rnorm(100), E = rnorm(100))
    bindata$ID <- as.character(bindata$ID
)

maxVal <- max(abs(bindata[ ,2:6]))
maxRange <- c(-1 * maxVal, maxVal)

listCID <- c()

my_fn <- function(data, mapping, ...){
  x <- data[ ,c(as.character(mapping$x))]
  y <- data[ ,c(as.character(mapping$y))]
  h <- hexbin(x=x, y=y, xbins=5, shape=1, IDs=TRUE, 
              xbnds=maxRange, ybnds=maxRange)
  hexdf <- data.frame(hcell2xy(h),  hexID=h@cell, counts=h@count)
  listCID <- c(listCID, h@cID)
  print(listCID)
  p <- ggplot(hexdf, aes(x=x, y=y, fill=counts, hexID=hexID)) + 
            geom_hex(stat="identity")
  p
}

p <- ggpairs(bindata[ ,2:6], lower=list(continuous=my_fn))
p

在此输入图像描述



1> Pewi..:

如果我正确理解你的问题,这很容易,虽然不是很优雅,但是使用<<-操作员来实现.

有了它,您可以在函数范围内分配类似全局变量的内容.

设置listCID <- NULL执行函数之前和listCID <<-c(listCID,h@cID)在函数内部.

listCID = NULL

my_fn <- function(data, mapping, ...){
  x = data[,c(as.character(mapping$x))]
  y = data[,c(as.character(mapping$y))]
  h <- hexbin(x=x, y=y, xbins=5, shape=1, IDs=TRUE, xbnds=maxRange, ybnds=maxRange)
  hexdf <- data.frame (hcell2xy (h),  hexID = h@cell, counts = h@count)

  if(exists("listCID")) listCID <<-c(listCID,h@cID)

  print(listCID)
  p <- ggplot(hexdf, aes(x=x, y=y, fill = counts, hexID=hexID)) + geom_hex(stat="identity")
  p
    }

有关范围的更多信息,请参阅Hadleys优秀的高级R:http://adv-r.had.co.nz/Environments.html

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有