R - 错误的引用和变量设置

时间:2014-10-13 12:01:55

标签: r debugging variables

你好!

在以下示例中,引用似乎存在问题。该代码重新组装了2v2游戏的国际象棋排名系统的计算。 "数据"中的每一行是游戏的结果

users表包含正在玩游戏的所有人。人们可以分为6类:" INT"," LKS"," SOD"," SJV"," LOY&#34 ;和" STA"。 " sex" -column表示男性/女性为0或1 - 此列永远不应更新。

数据文件是本文末尾的耗材。 这是我现在的代码:

data <- read.csv("data.txt", header=F, quote="")
colnames(data) <- c("user", "p1","p2", "skill","win","looser","time")

data <- data[-which(data$user==data$p1),]
data <- data[-which(data$user==data$p2),]

users <- data.matrix(read.csv("users.txt", header = FALSE, row.names = 1))
colnames(users) <- c("sex", "INT", "LKS", "LOY", "SJV", "SOD", "STA")
  for (i in 1:nrow(data)) {
    game <- data[i,]
    winner.old <- users[game$win,    game$skill]
    looser.old <- users[game$looser, game$skill]
    winner.new <- winner.old + 32/2 * (1 - 0 + (1/2) * (looser.old-winner.old) / 200)
    looser.new <- looser.old + 32/2 * (0 - 1 + (1/2) * (winner.old-looser.old) / 200)
    users[game$win,    game$skill] <- winner.new
    users[game$looser, game$skill] <- looser.new
  }

问题是

users[game$win,    game$skill]

这似乎引用了错误的技能专栏。我试图在下图中显示问题。对不起,它有点乱 - 但我已经尝试过对它进行颜色编码了!该输出从i <-1生成。运行整个for循环,您将看到STA列出现&#34;未触及&#34; - 它总是使用它应该使用的那个列的左边的列。

enter image description here

数据 http://textuploader.com/o68x

users.txt http://textuploader.com/o68g

1 个答案:

答案 0 :(得分:0)

因素是内部整数,如果您将它们用于子集,则使用内部表示:

DF <- data.frame(x=1:10)
DF$g <- c("b", "a")
#     x g
# 1   1 b
# 2   2 a
# 3   3 b
# 4   4 a
# 5   5 b
# 6   6 a
# 7   7 b
# 8   8 a
# 9   9 b
# 10 10 a

col <- factor("g", levels=c("g", "x"))

DF[, col]
#[1]  1  2  3  4  5  6  7  8  9 10
as.integer(col)
#[1] 1

您需要将因子转换为用于子集化的字符:

DF[, as.character(col)]
#[1] "b" "a" "b" "a" "b" "a" "b" "a" "b" "a"