gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:20:39 24 4
gpt4 key购买 nike

我正在使用 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

enter image description here

最佳答案

如果我正确理解了您的问题,使用 <<- 很容易实现,尽管不雅。运算符(operator)。

有了它,您可以从函数范围内分配诸如全局变量之类的东西。

套装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

关于r - 在 R 中的映射函数中添加到列表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41751113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com