我有脚本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)
}
答案 0 :(得分:0)
我已经找到了简单的答案,即使不是很优雅的答案:使用inv_cov_mat作为全局变量,而不是在knn函数中。然后其他脚本可以看到它。
答案 1 :(得分:0)
尚不清楚您想要什么,但是如果我对您的理解正确的话,您将拥有一个字符串,该字符串标识要使用的度量标准,并且具有相同的名称。因此,您应该能够使用get
根据名称检索函数。
metric == "mahalanobis"
metric.fun = get(metric)
distances <- apply(training_set, 1, metric.fun, vec2=curr_vec)
也就是说,可能有更好的方法来组织代码来完全避免此问题,例如创建用于访问指标的命名函数列表。
针对inv_cov_mat
的问题进行 EDIT ,可以将其作为参数传递给度量标准函数,也可以使用get
inside 来访问该函数使用envir
参数来自父环境的变量。将变量作为参数传递给度量函数绝对是一种更好,更简洁的方法。