R 阅读(CS)OAA中的大众原始分数

R 阅读(CS)OAA中的大众原始分数,r,parsing,vowpalwabbit,R,Parsing,Vowpalwabbit,VowpalWabbit将(CS)OAA模型的原始预测写为一系列行,如下所示: 1:-2.31425 2:-3.98557 3:-3.97967 4:-2.63708 5:-3.18749 6:-2.43984 7:-4.99018 8:-3.49138 9:-3.07816 10:-6.15126 11:-6.01152 12:-5.76039 13:-5.13096 14:-5.18472 15:-5.37358 16:-5.24147 17:-5.21512 18:-5.67961 19:

VowpalWabbit将(CS)OAA模型的原始预测写为一系列行,如下所示:

1:-2.31425 2:-3.98557 3:-3.97967 4:-2.63708 5:-3.18749 6:-2.43984 7:-4.99018 8:-3.49138 9:-3.07816 10:-6.15126 11:-6.01152 12:-5.76039 13:-5.13096 14:-5.18472 15:-5.37358 16:-5.24147 17:-5.21512 18:-5.67961 19:-4.62929 20:-4.61404 000db8cd6aef4e5fa459126d36e0fa1f-none
1:-2.65864 2:-3.33924 3:-2.8116 4:-1.83108 5:-2.05677 6:-1.29879 7:-6.7446 8:-3.05036 9:-2.82138 10:-5.19605 11:-4.5119 12:-5.28309 13:-4.35789 14:-4.76992 15:-4.16866 16:-4.6897 17:-3.76224 18:-4.13129 19:-4.4489 20:-4.32605 000e0e58a4cb4a218bbc6cae0b1af201-none
如何将其读入
R
? 这是我的密码:

## load raw vw (CS)OAA scores
read.vw.oaa.scores <- function (myfile) {
  v <- sapply(strsplit(readLines(myfile),' ',fixed=TRUE), function (r) {
    m <- matrix(unlist(strsplit(head(r,-1),':',fixed=TRUE)),ncol=2,byrow=TRUE)
    stopifnot(identical(1:nrow(m),as.integer(m[,1])))
    c(tail(r,1),m[,2])
  })
  f <- as.data.frame(t(v),stringsAsFactors=FALSE)
  names(f) <- c("id",head(names(f),-1))
  for (n in tail(names(f),-1))
    f[[n]] <- as.numeric(f[[n]])
  f
}
##加载原始大众(CS)OAA分数

read.vw.oaa.scores看看以下内容是否适合你(可能非常慢)。假设所有所需值均为数值:值格式。并使用raw,它要求每行存储为字符数组

raw = c("1:-2.31425 2:-3.98557 3:-3.97967 4:-2.63708 5:-3.18749 6:-2.43984 7:-4.99018 8:-3.49138 9:-3.07816 10:-6.15126 11:-6.01152 12:-5.76039 13:-5.13096 14:-5.18472 15:-5.37358 16:-5.24147 17:-5.21512 18:-5.67961 19:-4.62929 20:-4.61404 000db8cd6aef4e5fa459126d36e0fa1f-none",
"1:-2.65864 2:-3.33924 3:-2.8116 4:-1.83108 5:-2.05677 6:-1.29879 7:-6.7446 8:-3.05036 9:-2.82138 10:-5.19605 11:-4.5119 12:-5.28309 13:-4.35789 14:-4.76992 15:-4.16866 16:-4.6897 17:-3.76224 18:-4.13129 19:-4.4489 20:-4.32605 000e0e58a4cb4a218bbc6cae0b1af201-none")
清洁功能

clean = function(t, n) {as.numeric(gsub("^[0-9]+:", "", unlist(strsplit(t, split=" "))[1:n]))}
lapply(raw, clean, n = 20)

[[1]]
 [1] -2.31425 -3.98557 -3.97967 -2.63708 -3.18749 -2.43984 -4.99018 -3.49138 -3.07816 -6.15126 -6.01152 -5.76039
[13] -5.13096 -5.18472 -5.37358 -5.24147 -5.21512 -5.67961 -4.62929 -4.61404

[[2]]
 [1] -2.65864 -3.33924 -2.81160 -1.83108 -2.05677 -1.29879 -6.74460 -3.05036 -2.82138 -5.19605 -4.51190 -5.28309
[13] -4.35789 -4.76992 -4.16866 -4.68970 -3.76224 -4.13129 -4.44890 -4.32605

谢谢请注意,首先,返回值不是
data.frame
。其次,您正在删除ID。第三,您没有执行错误检查(请参见我的代码中的
stopifnot
)。