gpt4 book ai didi

r - 我不明白函数内的错误 "object not found"

转载 作者:行者123 更新时间:2023-12-02 09:25:08 25 4
gpt4 key购买 nike

我大致有这个功能:

plot_pca_models <- function(models, id) {
library(lattice)

splom(models, groups=id)
}

我这样调用它:

plot_pca_models(data.pca, log$id)

这会导致此错误:

Error in eval(expr, envir, enclos) : object 'id' not found

当我在没有包装函数的情况下调用它时:

splom(data.pca, groups=log$id)

它会引发此错误:

Error in log$id : object of type 'special' is not subsettable

但是当我这样做时:

 id <- log$id
splom(models, groups=id)

它的行为符合预期。

请问谁能解释一下为什么会这样以及如何纠正它?谢谢。

顺便说一句:我知道这里有类似的问题,例如:

但他们都没有帮助我。

编辑:根据要求,有完整的“plot_pca_models”功能:

plot_pca_models <- function(data, id, sel=c(1:4), comp=1) {
# 'data' ... princomp objects
# 'id' ... list of samples id (classes)
# 'sel' ... list of models to compare
# 'comp' ... which pca component to compare

library(lattice)

models <- c()
models.size <- 1:length(data)
for(model in models.size) {
models <- c(models, list(data[[model]]$scores[,comp]))
}
names(models) <- 1:length(data)

models <- do.call(cbind, models[sel])

splom(models, groups=id)
}

编辑2:我已经设法使问题重现。

require(lattice)
my.data <- data.frame(pca1 = rnorm(100), pca2 = rnorm(100), pca3 = rnorm(100))
my.id <- data.frame(id = sample(letters[1:4], 100, replace = TRUE))

plot_pca_models2 <- function(x, ajdi) {
splom(x, group = ajdi)
}

plot_pca_models2(x = my.data, ajdi = my.id$id)

这会产生与上面相同的错误。

最佳答案

问题在于 splom 以非标准方式评估其 groups 参数。快速修复方法是重写您的函数,以便它使用适当的语法构造调用:

f <- function(data, id)
eval(substitute(splom(data, groups=.id), list(.id=id)))

# test it
ir <- iris[-5]
sp <- iris[, 5]
f(ir, sp)

关于r - 我不明白函数内的错误 "object not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17992424/

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