Помогите с функцией sprintf в R - PullRequest
2 голосов
/ 26 августа 2010

У меня есть следующий код R:

df <- xmlToDataFrame(/Users/usr/Desktop/shares.xml)
df$timeStamp <- strptime(as.character(df$XTimeStamp), "%H:%M:%OS")
df$SharePrice <- as.numeric(as.character(df$SharePrice))
sapply(df, class)
options("digits.secs"=3)
diff <- diff(df$SharePrice)
diff
sink (file="c:/xampp/htdocs/data.xml", type="output",split=FALSE)
cat("<graph caption=\"Share Price Data Wave\" subcaption=\"For Company's Name\"    xAxisName=\"Time\" yAxisMinValue=\"0\" yAxisName=\"Price\" decimalPrecision=\"5\" formatNumberScale=\"0\" numberPrefix=\"\" showNames=\"1\" showValues=\"0\" showAlternateHGridColor=\"1\" AlternateHGridColor=\"ff5904\" divLineColor=\"ff5904\" divLineAlpha=\"20\" alternateHGridAlpha=\"5\">\n")
cat(sprintf("    <set name=\"%s\" value=\"%f\" hoverText = \"The difference from last value = %d\" ></set>\n", df$XTimeStamp, df$SharePrice, diff))

Я создаю новый XML-файл в формате, который FusionChart Free может прочитать, и я пытаюсь поместить сообщение в область hoverText.Однако, когда я запускаю команды, я получаю следующую ошибку:

Error in sprintf("    <set name=\"%s\" value=\"%f\" hoverText = \"The difference from last value = %d\" ></set>\n",  : 
 arguments cannot be recycled to the same length

Когда я просматриваю разницу, она имеет разницу на единицу меньше, чем SharePrice (очевидно, потому что разница от точки 1 до точки 1 равна нулю)как можно объяснить это в функции sprint (она выдаст правильный XML-файл формата, если я пропущу diff)?

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Либо избавьтесь от первого элемента df$XTimeStamp и df$SharePrice, либо добавьте NA в качестве первого элемента diff.

cat(sprintf("    <set name=\"%s\" value=\"%f\" hoverText = \"The difference from last value = %d\" ></set>\n", df$XTimeStamp[-1], df$SharePrice[-1], diff))

или

cat(sprintf("    <set name=\"%s\" value=\"%f\" hoverText = \"The difference from last value = %d\" ></set>\n", df$XTimeStamp, df$SharePrice, c(NA,diff)))
1 голос
/ 26 августа 2010

Кроме того, если вы делаете много такого рода заполнения шаблонов, посмотрите на пакет brew на CRAN - ничего общего с вашим первоначальным вопросом, но всякий раз, когда я вижу уродливую длинную последовательность «cat»вызовы функций, я просто должен упомянуть об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...