我试图了解使用谓词和使用ncp <- function(df2){ # Root finding: finds 2 `ncp` for a given `df2`
b <- sapply(c(alpha[1], alpha[2]),
function(x)
tryCatch(uniroot(f, c(0, 1e7), alpha = x, q = peta, df1 = df1, df2 = df2)[[1]],
error =function(e)NA ))
if(any(is.na(b)))b= c(1,10)
b / (b + (df2 + 4))
}
uniroot(ncp_diff, c(0, 1000)) #
$root
[1] 336.3956
$f.root
[1] -2.132438e-09
$iter
[1] 8
$init.it
[1] NA
$estim.prec
[1] 6.103516e-05
之间是否有区别?
从性能的角度来看,谓词的使用会更好吗?谓词是否也遍历xml树中的每个节点以根据过滤条件识别节点?
答案 0 :(得分:1)
在XPath谓词或xsl:if
(或xsl:when
)测试中放置条件之间的决定实际上是样式之一,而不是性能。
过程 代码,但要优雅地利用XSLT的功能,请在XSLT的 基础上声明性 模式匹配和转换功能。
与其进行 (先执行此操作,然后再执行),而不是思考如何进行 声明式 通过匹配和转换来表达输入XML和输出XML之间的关系(匹配输入XML并映射到输出XML 。这是xs:template
的目的。)。谓词可帮助您以声明方式表达模式匹配,因此在使用XSLT的设计方式时,它比过程性xsl:if
语句更可取。
答案 1 :(得分:1)
XSLT和XQuery使用XPath作为表达式语言,谓词是XPath表达式https://www.w3.org/TR/xpath-31/#id-filter-expression的一部分,xsl:if
是XSLT语言https://www.w3.org/TR/xslt-30/#xsl-if的指令。
对于您在对Tim的评论中提到的示例,我认为大多数人更喜欢使用谓词进行选择和过滤的紧凑XPath语法方法,除非您需要使用name = 'John'
输出节点的位置关于所有选定的节点,例如<xsl:for-each select="person[name = 'John']"><xsl:value-of select="position()"/></xsl:for-each>
将输出输出1,2,3...
,其中包含person
个子元素的name = 'John'
个元素的数量,而<xsl:for-each select="person"><xsl:if test="name = 'John'"><xsl:value-of select="position()"/></xsl:if></xsl:for-each>
将输出每个person
元素的位置在所有name = 'John'
元素的序列中包含一个person
子元素。
关于性能,我认为您需要检查特定处理器的特定情况,对于声明性语言,处理器可以选择重写或优化任何代码,只要它能产生定义的输出即可。