【发布时间】:2019-11-05 01:52:32
【问题描述】:
我有脚本 main.R,我在其中创建 inv_cov_mat 变量。我稍后加载metrics.R并用它来计算函数值(我用它作为一种脚本间函数闭包)。我收到错误“找不到对象'inv_cov_mat'”。我的代码:
main.R:
knn <- function(...)
{
# some code
source("./source/metrics.R")
if (metric == "mahalanobis")
inv_cov_mat <- solve(cov(training_set))
# other code
# calculate distance in given metric between current vector and every row vector from training set matrix
distances <- apply(training_set, 1, metric, vec2=curr_vec) # error
metrics.R:
mahalanobis <- function(vec1, vec2)
{
diff <- vec1 - vec2
sqrt(t(diff) %*% inv_cov_mat %*% diff)
}
【问题讨论】:
-
你能在
mahalanobis to pass the inv_cov_mat. Also, what istraining_set`中添加一个新参数吗? -
我可以,但因为我选择了带有 match.fun(fun_as_string) 的度量函数,我必须创建嵌套的 if 构造来使用需要 2 个向量之外的东西的度量(例如 Mahalanobis,标准化欧几里得)。这会让我的代码变得更慢、更丑、更难维护。
-
或者您可能必须传递环境,以便函数在正确的环境中检查对象。类似于here
-
我编辑了我的问题来回答您关于 training_set 的问题。关于环境 - 我尝试在 mahalanobis 函数中使用
get("inv_cov_mat", env=parent.frame(), inherits=TRUE),但由于某种原因找不到它。
标签: r