我有一个简单的问题。我试图循环一组变量来生成prop.tables。我只是试图直观地检查结果。
这是mtcars数据集中无意义的例子。
-like '*19?9*'
输出为以下6项:
#define loop variables
test <- mtcars
target_var <- c("mpg", "wt") # targets
group_var <- c("gear", "carb") # groups to loop through
#loop through combinations of targets and groups, running prop.table
for (i in target_var) {
for (j in group_var) {
print(prop.table(table(test$i, test$j), 2))
}
}
我知道我错过了一些基本的东西。
答案 0 :(得分:1)
test$i
无法工作。 i
数据框中没有列mtcars
- 运算符$
无法解析变量名称。您可能需要test[i, ]
或test[, i]
。
另请注意,没有名为"3"
和"4"
的列或行,因此对group_var
的迭代不会产生任何意义。
答案 1 :(得分:1)
正如Maciej所提到的,你不能指望import wx.adv
被评估,以便test$i
被你要提取的列替换。但是,我们可以使用函数i
和parse_expr
来控制要评估的内容以及何时进行评估。对代码进行细微更改可以使其工作:
eval
答案 2 :(得分:1)
我发现您对循环解决方案很感兴趣,但我会发布tidyverse
方法,您可以map
将函数test <- mtcars
target_var <- c("mpg", "wt")
group_var <- c("gear", "carb")
library(tidyverse)
# get combinations of variables in a dataset
df1 = expand.grid(target_var, group_var, stringsAsFactors = F)
# apply the function (prop.table etc.) to those combinations
map2(df1$Var1, df1$Var2, ~prop.table(table(test[, .x], test[, .y]), 2))
添加到变量的每个组合中,而不是循环。< / p>
[[1,'https://hooks.com/catch/123'],[2,'https://hooks.com/catch/123'],[3,'https://hooks.com/catch/123']]
这将为您提供一个包含所需表格的列表。