使用另一个脚本中的变量(文件间函数关闭)

时间:2019-06-22 15:01:41

标签: r

我有脚本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)
}

2 个答案:

答案 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参数来自父环境的变量。将变量作为参数传递给度量函数绝对是一种更好,更简洁的方法。