使用R&#39的`get()`函数,同时使用包进行限定

时间:2014-01-20 01:15:11

标签: r function packages

我想使用字符串将函数赋值给变量。 get()包中的base函数几乎几乎是我想要的。例如,

valueReadFromFile <- "median"
ds <- data.frame(X=rnorm(10), Y=rnorm(10))
dynamicFunction <- get(valueReadFromFile)
dynamicFunction(ds$X) #Returns the variable's median.

但是,我希望通过其软件包对该功能进行限定,这样我就不必担心(a)使用library()加载函数包,或者(b)调用不同包装中的错误功能。

是否有一种强大的,以编程方式的方式,我可以使用get()(或某些类似的功能)使用其包来限定函数的名称?以下代码无效,大概是因为get()不知道如何在::之前解释包名称。

require(scales) #This package has functions called `alpha()` and `rescale()`
require(psych) #This package also has functions called `alpha()` and `rescale()`

dynamicFunction1 <- get("scales::alpha")
dynamicFunction2 <- get("psych::alpha")

2 个答案:

答案 0 :(得分:3)

试试这个:

dynamicFunction1 <- get("alpha", envir=as.environment("package:scales"))
dynamicFunction2 <- get("alpha", as.environment("package:psych"))

术语问题:我不会将dynamicFunction1称为“变量”,而是称为“名称”。实际上并没有一个名为“变量”的正式对象类,但我通常会看到该术语用于数据对象,而“名称”则是语言对象。

答案 1 :(得分:2)

您也可以直接使用字符值调用::,或getExportedValue内部使用的::

例如

dynamicFunction1 <- `::`('scales', 'alpha')
dynamicFunction2 <- `::`('psych', 'alpha')

dynamicFunction1 <-  getExportedValue('scales', 'alpha')
dynamicFunction2 <-  getExportedValue('psych', 'alpha')