使用字符串变量在 R 函数中传递多个变量信息
Posted
技术标签:
【中文标题】使用字符串变量在 R 函数中传递多个变量信息【英文标题】:Passing multiple variable information inside R functions using string variable 【发布时间】:2018-09-27 12:23:20 【问题描述】:这是一个可重现的例子
#install.packages("expss")
library("expss")
data(mtcars)
mtcars = apply_labels(mtcars,
mpg = "Miles/(US) gallon",
cyl = "Number of cylinders",
disp = "Displacement (cu.in.)",
hp = "Gross horsepower",
drat = "Rear axle ratio",
wt = "Weight (1000 lbs)",
qsec = "1/4 mile time",
vs = "Engine",
vs = c("V-engine" = 0,
"Straight engine" = 1),
am = "Transmission",
am = c("Automatic" = 0,
"Manual"=1),
gear = "Number of forward gears",
carb = "Number of carburetors"
)
mtcars %>%
tab_cols(total(),vs,gear) %>%
tab_cells(gear) %>%
tab_stat_cpct(total_row_position = "none", label = "col %") %>%
tab_pivot(stat_position = "inside_rows")
根据我的情况,我想动态传递 tab_cols(total(),vs,gear) 中的变量信息。因此,为了便于使用,假设我想评估如下功能:
var1 <- "vs, gear"
mtcars %>%
tab_cols(total(),var1) %>%
tab_cells(gear) %>%
tab_stat_cpct(total_row_position = "none", label = "col %") %>%
tab_pivot(stat_position = "inside_rows")
这显然会出错!我知道仅适用于单个参数的惰性评估。因此尝试了很多在多个论坛上搜索,但没有运气。
所以,一种很好的方法可能是:
var1 <- "vs"
var2 <- "gear"
mtcars %>%
tab_cols(total(),eval(parse(text = var1)),eval(parse(text = var2))) %>%
tab_cells(gear) %>%
tab_stat_cpct(total_row_position = "none", label = "col %") %>%
tab_pivot(stat_position = "inside_rows")
但我想用单个变量(它具有字符串或向量形式的变量信息)来实现这一点,因为该变量可能存储超过 3 或 4 列信息。
【问题讨论】:
需要紧急帮助 【参考方案1】:在expss中有一个特殊的工具来传递参数:
var1 <- "vs, gear"
var_names = trimws(unlist(strsplit(var1, split = ",")))
mtcars %>%
tab_cols(total(), ..[(var_names)]) %>%
tab_cells(gear) %>%
tab_stat_cpct(total_row_position = "none", label = "col %") %>%
tab_pivot(stat_position = "inside_rows")
免责声明:我是 expss 包的作者。
【讨论】:
@Demin:非常感谢,这就是我要找的。非常感谢! 出于好奇,这是一个在这种情况下帮助我们的函数。您是否可以分享完成该任务的基本技巧,我们也可以在其他功能中实现这一点.... 你能帮忙***.com/q/50055988/9204376话题【参考方案2】:文档table_cols
说您可以传递列名列表。所以这似乎做你想做的事:
vars <- expression(list(vs, gear))
mtcars %>%
tab_cols(total(), eval(vars)) %>%
tab_cells(gear) %>%
tab_stat_cpct(total_row_position = "none", label = "col %") %>%
tab_pivot(stat_position = "inside_rows")
【讨论】:
这也是一种传递多个变量的方法,但在我的情况下,汽车是字符串。 我不明白。什么车在哪个字符串里? 哦,您的意思是变量(“var”被错误输入为“car”)存储为字符串?这似乎不是您问题的重要组成部分。您想在交互式会话中(即不在函数中)动态发送多个变量,并且您尝试了一个字符串,但它不起作用。那么问题的一部分是首先尝试使用字符串。但是,如果您必须使用字符串(出于您尚未提及的原因),那么这将成为问题的重要组成部分,您需要进行编辑以反映这一点。跨度> 抱歉 :( ....是的,我明白了。这是我的错误,我无法将其放在我的问题中...是的,我正在使用变量寻找答案它将以向量形式或字符串形式存储信息...以上是关于使用字符串变量在 R 函数中传递多个变量信息的主要内容,如果未能解决你的问题,请参考以下文章