【发布时间】:2021-01-22 17:13:54
【问题描述】:
这可能是一个微不足道的问题,但我正在努力解决它。 我正在尝试在函数中索引命名变量。举个例子。我想为我的变量分配标签。我知道我可以使用以下代码行来做到这一点
iris<–iris
attr(iris$Sepal.Width, "label") <- "Label 1"
library(Hmisc)
contents(iris)
Labels Levels Storage
Sepal.Length double
Sepal.Width Label 1 double # my variable is labelled
Petal.Length double
Petal.Width double
Species 3 integer
但是,如果我尝试创建一个执行相同操作的函数,我会遇到错误,因为我无法在用户编写的函数中索引命名变量。
例如,如果我创建一个这样定义的函数labvar,我会遇到错误。
labvar <- function(var,lab){
attr(iris[[var]], "label") <- lab
}
labvar("Sepal.Length", "label 2")
Labels Levels Storage
Sepal.Length double # variable remains not labelled
Sepal.Width Label 1 double
Petal.Length double
Petal.Width double
Species 3 integer
我还绑定了多种替代方法来使用iris[[var]],iris[var],iris{{var}} 对变量进行索引,但这些方法都不起作用。
谁能帮助我并解释如何像在函数外使用 $ 那样索引命名变量?
非常感谢您的帮助
【问题讨论】:
-
你到底想在这里做什么?如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。你can't use $ with a variable 但你可以使用
[[]]但看起来这并不是问题所在。什么对你“不起作用”?你有错误吗? -
我已经编辑了这个问题,我希望它更清楚。不幸的是
[[]]不起作用 -
您需要更清楚“不起作用”的含义。运行代码时会发生什么或不会发生什么。运行函数后的期望值是多少?似乎您以错误的方式分配值。你的意思是
attr(dt[[var]], "label") <- lab?他们确保使用引号labvar("Sepal.Length", "label 1")调用该函数。但是您在函数中使用了dt,并且没有在任何奇怪的地方定义。