【发布时间】:2013-08-01 11:10:24
【问题描述】:
我大概有这个功能:
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)
它的行为符合预期。
请任何人解释它为什么会这样以及如何纠正它?谢谢。
顺便说一句: 我在这里知道类似的问题,例如:
- Help understand the error in a function I defined in R
- Object not found error with ddply inside a function
- Object disappears from namespace in function
但他们都没有帮助我。
编辑: 根据要求,有完整的“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)
}
edit2: 我已经设法使问题可重现。
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)
产生与上述相同的错误。
【问题讨论】:
-
log是基础 R 中的一个函数。好的做法是不要在函数之后命名对象...这会造成混淆。 -
不要调用你的对象
log。log是base包中的一个函数。更改名称并告诉我们问题是否仍然存在。 -
这是因为 lattice 使用了非标准评估。你实际上并没有说出你想要什么,而是尝试
print(splom(models, groups=id)) -
如何让您的问题可重现?它将把战争缩短 5 年,挽救数千人的生命。
-
@Roman Luštrik:好的:D,在我的问题末尾有描述。
标签: r