我正在尝试使用if - else语句将不同的字符串捕获到不同条件的文件中:
cat("<graph caption=\"ECG Data Wave\" subcaption=\"For Person's Name\" xAxisName=\"Time\" yAxisMinValue=\"-0.025\" yAxisName=\"Voltage\" decimalPrecision=\"5\" formatNumberScale=\"0\" numberPrefix=\"\" showNames=\"1\" showValues=\"0\" showAlternateHGridColor=\"1\" AlternateHGridColor=\"ff5904\" divLineColor=\"ff5904\" divLineAlpha=\"20\" alternateHGridAlpha=\"5\">\n")
if (df$BP > 140 && df$Yvoltage < -0.05){
cat(sprintf(" <set name=\"%s\" value=\"%f\" hoverText = \"Blood Pressure High, Level of Activity Low\" ></set>\n", df$XTimeStamp, df$YVoltage, diff))else
if (df$BP > 140 && df$Yvoltage > -0.05)
cat(sprintf(" <set name=\"%s\" value=\"%f\" hoverText = \"Blood Pressure Normal, Level of Activity Normal\" ></set>\n", df$XTimeStamp, df$YVoltage, diff)) else
if (df$BP > 140 && df$Yvoltage > -0.35)
cat(sprintf(" <set name=\"%s\" value=\"%f\" hoverText = \"Blood Pressure High, Level of Activity High\" ></set>\n", df$XTimeStamp, df$YVoltage, diff))}
cat(' <trendlines>
<line startvalue="0.30" displayValue="High Activity" color="FF0000" thickness="1" isTrendZone="0"></line>
<line startvalue="-0.05" displayValue="Low Activity" color="009999" thickness="1" isTrendZone="0"></line>
\ N') 猫(“\ n”)
当我尝试运行代码时,我不断收到如下错误:
Error: unexpected 'else' in:
"if (df$BP > 140 && df$Yvoltage < -0.05){
cat(sprintf(" <set name=\"%s\" value=\"%f\" hoverText = \"Blood Pressure High, Level of Activity Low\" ></set>\n", df$XTimeStamp, df$YVoltage, diff))else"
我出错的任何想法?这是正确的方法这是否有更好的方法来编写文件?
我正在尝试遵循Spacedman的建议并使用brew。我尝试了不同的差异,我得到以下错误信息:
Error: unexpected input in "cat (sprintf(" <set name=\"%s\" value=\"%f\" hoverText = "<%= hovertext =>" ></set>\n", df$XTimeStamp, df$YVoltage))"
或者如果我开始工作,hovertext在整个过程中保持不变。
目前R代码如下:
if(df$BP > 140 && df$YVoltage < -0.05){
hovertext ="Blood Pressure High, Level of Activity Low"
}else{
if(df$BP < 140 && df$BP > 90 && df$YVoltage > -0.05 && df$YVoltage < 0.30 ){
hovertext ="Blood Pressure normal, Level of Activity normal"
} else {
hovertext ="Blood Pressure High, Level of Activity high"
}
sink (file="c:/Users/usr/Desktop/data.xml", type="output",split=FALSE)
cat("<graph caption=\"ECG Data Wave\" subcaption=\"For Person's Name\" xAxisName=\"Time\" yAxisMinValue=\"-0.025\" yAxisName=\"Voltage\" 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 = "<%= hovertext =>" ></set>\n", df$XTimeStamp, df$YVoltage))
cat(' <trendlines>
<line startvalue="0.30" displayValue="High Activity" color="FF0000" thickness="1" isTrendZone="0"></line>
<line startvalue="-0.05" displayValue="Low Activity" color="009999" thickness="1" isTrendZone="0"></line>
</trendlines>\n')
cat ("</graph>\n")
unlink("data.xml")
关于我在代码中哪里出错的任何想法?
答案 0 :(得分:2)
}
之前没有结束结束括号(else
)。
对于嵌套if
,您应该使用:
if (test) {statement} else {if (test) {statement} else {...}}
此外,您似乎在data.frame
语句中引用了if
列。如果这有ifelse
,但我不确定这会给出您想要的内容,您可能已经编写了一个循环。
答案 1 :(得分:1)
另外,令人讨厌的代码。尝试使用“brew”包(在CRAN上)进行模板化。它使事情变得简单,为模板字符串中的引号节省了大量的反斜杠,并迫使您从模板字符串中取出大块逻辑并进入它所属的应用程序。
例如,你的第一个if-else混乱只决定使用什么hovertext。它会更好:
if(foo){
hovertext = "first hover text"
}else{
if(foobar){
hovertext = "second hovertext"
} else {
hovertext = "third hovertext"
}
}
然后将hovertext放入brew模板文件中:
...
<set name="<%= df$XTimeStamp %>" value="<%= df$YVoltage=>" hoverText = "<%= hovertext =>" ></set>
...
另外,您的sprintfs有两个占位符(%-markers)但有三个变量。到底有什么额外的“差异”?使用brew的另一个原因!
答案 2 :(得分:0)
更好地使用XML包将您的数据转换为XML。然而,问题本身已被詹姆斯发现。