【问题标题】:Gnu R: Rename variable in loopGnu R:在循环中重命名变量
【发布时间】:2014-06-17 18:32:44
【问题描述】:

我想创建一个循环来创建 15 个交叉表,其中一个 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
}

【问题讨论】:

  • 答案是:不要那样做。改为使用列表作为输出。
  • 你能更具体一点吗?我是 R 新手。

标签: r loops while-loop rename crosstab


【解决方案1】:

正如 cmets 中所建议的,在使用 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]])
}

所以现在要访问“mytable2”和“myassoc2”,您只需执行以下操作:

> 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 

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 2016-09-28
    • 1970-01-01
    • 2018-12-07
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2019-07-05
    相关资源
    最近更新 更多