我想创建一个循环,以创建15个crosstables,其中一个data.frame(var1)由15个变量和另一个变量(var2)组成,请参阅可以下载的数据here。
代码现在能够给出结果,但我想知道如何重命名变量" mytable"所以我得到mytable1,mytable2等
代码:
library(vcd) # for Cramer's V
var1 <- read.csv("~/example.csv", dec=",")
var2 <- sample(1:43)
i <- 1
while(i <= ncol(var1)) {
mytable[[i]] <- table(var2,var1[,i])
assocstats(mytable[[i]])
print(mytable[[i]])
i <- i + 1
}
答案 0 :(得分:0)
正如评论中所建议的那样,在使用R时,主动阻止使用mytable1,mytable2等名称作为对象列表。在list
中收集所有内容更有用,更清晰。
做你想做的事的一种方法是:
library(vcd) # for Cramer's V
data(mtcars)
var1 <- mtcars[ , c(2, 8:11)] ##OP's CSV no longer available
var2 <- sample(1:5, 32, TRUE)
mytable <- myassoc <- list() ##store output in a list
##a `for` loop looks simpler than `while`
for(i in 1:ncol(var1)){
mytable[[i]] <- table(var2, var1[ , i])
myassoc[[i]] <- assocstats(mytable[[i]])
}
现在要访问&#34; mytable2&#34;和&#34; myassoc2&#34;你会这样做:
> mytable[[2]]
var2 0 1
1 4 2
2 6 6
3 1 1
4 2 3
5 5 2
> myassoc[[2]]
X^2 df P(> X^2)
Likelihood Ratio 1.7079 4 0.78928
Pearson 1.6786 4 0.79460
Phi-Coefficient : NA
Contingency Coeff.: 0.223
Cramer's V : 0.229