我想使用字符串将函数赋值给变量。 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")
答案 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')