如何正确处理函数中的协变量并将其名称列为字符串?
How to properly address covariates in functions with their names listed into strings?
我有一长串协变量,我想将它们存储为字符串,以便在多个函数中更方便地使用它。
我认为这个问题与 有关,但我不能将其应用于与回归公式不同的情况。
xvar <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
with(iris, iris[order(Sepal.Length, Sepal.Width,
Petal.Length, Petal.Width), ]) # working
with(iris, iris[order(xvar), ]) # not working
或其他情况
with(iris, ave(Sepal.Length, Sepal.Width,
Petal.Length, Petal.Width)) # working
with(iris, ave(xvar)) # not working
with(iris, ave(noquote(paste(xvar, collapse = ", ")))) # not working as well
尤其是粘贴版本我不明白为什么它不起作用,尽管它产生的字符串与括号中的字符串完全相同:
> noquote(paste(xvar, collapse = ", "))
[1] Sepal.Length, Sepal.Width, Petal.Length, Petal.Width
我错过了什么?
请务必注意,字符值和实际代码有很大不同。比较一下
with(iris, order("Sepal.Length"))
with(iris, order(Sepal.Length))
像paste()
这样的函数只生成字符串,noquote()
也只生成returns字符串,它只是不打印引号。如果您尝试动态创建代码,通常必须将字符串解析为适当的 R 语言对象。有时你可以做一些偷偷摸摸的替代品。
一种可能的解决方法是使用 do.call
将您要作为排序依据的列作为单独的参数传递给 order
。你可以做到
iris[do.call("order", iris[xvar]), ]
dplyr
包有 tidyevels 方法也可以帮助处理东西
library(dplyr)
iris %>% arrange(!!!rlang::syms(xvar))
我有一长串协变量,我想将它们存储为字符串,以便在多个函数中更方便地使用它。
我认为这个问题与
xvar <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
with(iris, iris[order(Sepal.Length, Sepal.Width,
Petal.Length, Petal.Width), ]) # working
with(iris, iris[order(xvar), ]) # not working
或其他情况
with(iris, ave(Sepal.Length, Sepal.Width,
Petal.Length, Petal.Width)) # working
with(iris, ave(xvar)) # not working
with(iris, ave(noquote(paste(xvar, collapse = ", ")))) # not working as well
尤其是粘贴版本我不明白为什么它不起作用,尽管它产生的字符串与括号中的字符串完全相同:
> noquote(paste(xvar, collapse = ", "))
[1] Sepal.Length, Sepal.Width, Petal.Length, Petal.Width
我错过了什么?
请务必注意,字符值和实际代码有很大不同。比较一下
with(iris, order("Sepal.Length"))
with(iris, order(Sepal.Length))
像paste()
这样的函数只生成字符串,noquote()
也只生成returns字符串,它只是不打印引号。如果您尝试动态创建代码,通常必须将字符串解析为适当的 R 语言对象。有时你可以做一些偷偷摸摸的替代品。
一种可能的解决方法是使用 do.call
将您要作为排序依据的列作为单独的参数传递给 order
。你可以做到
iris[do.call("order", iris[xvar]), ]
dplyr
包有 tidyevels 方法也可以帮助处理东西
library(dplyr)
iris %>% arrange(!!!rlang::syms(xvar))