[Rd] sprintf error: "only 100 arguments allowed"

Martin Bel m4rbel at gmail.com
Sat Aug 22 05:21:29 CEST 2015


I'm trying to apply a function defined in the VW R docs, that attemps to
convert a data.table object to Vowpal Wabbit format. In the process i'm
getting the error in printf mentioned in the subject.
The original function is here:
https://github.com/JohnLangford/vowpal_wabbit/blob/master/R/dt2vw.R


Below there is a small example that reproduces the error. The function
works great with smaller (less than 100 columns), as shown.

Any suggestions of alternative methods to acomplish the same would be
great, but I'm basically asking, is there a reason for the 100 arguments
limitation?


# Source this function#
https://github.com/JohnLangford/vowpal_wabbit/blob/master/R/dt2vw.R
# Here is a gist
source('https://gist.githubusercontent.com/martinbel/a013c2bd2333b85eeb76/raw/7b68ede0385f3d8684a07854e8d6ca527b9cd441/dt2vw.R')

library(data.table)

X = cbind(matrix(rnorm(1:1010), nrow=10, ncol=101), sample(c(1, -1), 10, T))
X = as.data.table(X)
X[, weight:=ifelse(V102 == 1, 3, 1)]
# check out function arguments
head(dt2vw, 2)# function (data, fileName, namespaces = NULL, target,
weight = NULL, #                 tag = NULL, hard_parse = F)

namespaces = list(a = list(varName = sprintf('V%s',1:50), keepSpace=F),
                  b = list(varName = sprintf('V%s',51:101), keepSpace=F))

dt2vw(data=X, fileName='../out.vw', namespaces = NULL,
      target='V102', weight = 'weight',
      tag = NULL, hard_parse = F)
### error
# [1] "sprintf('%f %f |A V1:%f V2:%f V3:%f V4:%f V5:%f V6:%f V7:%f
V8:%f V9:%f V10:%f V11:%f V12:%f V13:%f V14:%f V15:%f V16:%f V17:%f
V18:%f V19:%f V20:%f V21:%f V22:%f V23:%f V24:%f V25:%f V26:%f V27:%f
V28:%f V29:%f V30:%f V31:%f V32:%f V33:%f V34:%f V35:%f V36:%f V37:%f
V38:%f V39:%f V40:%f V41:%f V42:%f V43:%f V44:%f V45:%f V46:%f V47:%f
V48:%f V49:%f V50:%f V51:%f V52:%f V53:%f V54:%f V55:%f V56:%f V57:%f
V58:%f V59:%f V60:%f V61:%f V62:%f V63:%f V64:%f V65:%f V66:%f V67:%f
V68:%f V69:%f V70:%f V71:%f V72:%f V73:%f V74:%f V75:%f V76:%f V77:%f
V78:%f V79:%f V80:%f V81:%f V82:%f V83:%f V84:%f V85:%f V86:%f V87:%f
V88:%f V89:%f V90:%f V91:%f V92:%f V93:%f V94:%f V95:%f V96:%f V97:%f
V98:%f V99:%f V100:%f V101:%f ',V102, weight, V1, V2, V3, V4, V5, V6,
V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20,
V21, V22, V23, V24, V25, V26, V27, V28, V29, V30, V31, V32, V33, V34,
V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, V45, V46, V47, V48,
V49, V50, V51, V52, V53, V54, V55, V56, V57, V58, V59, V60, V61, V62,
V63, V64, V65, V66, V67, V68, V69, V70, V71, V72, V73, V74, V75, V76,
V77, V78, V79, V80, V81, V82, V83, V84, V85, V86, V87, V88, V89, V90,
V91, V92, V93, V94, V95, V96, V97, V98, V99, V100, V101)"
# Error in sprintf("%f %f |A V1:%f V2:%f V3:%f V4:%f V5:%f V6:%f V7:%f
V8:%f V9:%f V10:%f V11:%f V12:%f V13:%f V14:%f V15:%f V16:%f V17:%f
V18:%f V19:%f V20:%f V21:%f V22:%f V23:%f V24:%f V25:%f V26:%f V27:%f
V28:%f V29:%f V30:%f V31:%f V32:%f V33:%f V34:%f V35:%f V36:%f V37:%f
V38:%f V39:%f V40:%f V41:%f V42:%f V43:%f V44:%f V45:%f V46:%f V47:%f
V48:%f V49:%f V50:%f V51:%f V52:%f V53:%f V54:%f V55:%f V56:%f V57:%f
V58:%f V59:%f V60:%f V61:%f V62:%f V63:%f V64:%f V65:%f V66:%f V67:%f
V68:%f V69:%f V70:%f V71:%f V72:%f V73:%f V74:%f V75:%f V76:%f V77:%f
V78:%f V79:%f V80:%f V81:%f V82:%f V83:%f V84:%f V85:%f V86:%f V87:%f
V88:%f V89:%f V90:%f V91:%f V92:%f V93:%f V94:%f V95:%f V96:%f V97:%f
V98:%f V99:%f V100:%f V101:%f ",  : # only 100 arguments are allowed
# works
dt2vw(data=X[, 50:dim(X)[2], with=FALSE],
      fileName='../out.vw', namespaces = NULL,
      target='V102', weight = 'weight',
      tag = NULL, hard_parse = F)

system('head -3 ../out.vw')

	[[alternative HTML version deleted]]



More information about the R-devel mailing list