JavaScript 中的 R NULL 值

R NULL values in JavaScript

提问人:iembry 提问时间:10/24/2023 最后编辑:iembry 更新时间:10/27/2023 访问量:25

问:

更新:2023 年 10 月 26 日

完整功能(和Manningtrap_critical功能)可以在 https://gitlab.com/iembry/iemisc/-/raw/master/R/Manningtrap.R 查看。


更新:2023 年 10 月 25 日

HTML 网页可以在 https://gitlab.com/iembry/iemisc/-/blob/master/inst/www/manningtrap.html 在线查看


我正在用我的软件包测试 Manningtrap 函数。Manningtrap 功能可在 https://gitlab.com/iembry/iemisc/-/blob/master/R/Manningtrap.R 在线查看。iemiscopencpu

我尝试使用HTML表单测试以下示例(请参阅下面的代码和图像):

library(iemisc)

Manningtrap(y = 1.454, b = 4, m = 3, Sf = 0.02, n = 0.0550, units = "Eng", type = "symmetrical",
output = "data.table")

enter image description here

以下代码显示了用于处理从 HTML 表单获取的变量的 JavaScript 代码:


//init this script when the page has loaded
$(document).ready(function(){
$("#submitbutton").on("click", function(){
//disable the button to prevent multiple clicks
$("#submitbutton").attr("disabled", "disabled");

//read the value for 'Q'
var Q = $("#Qfield").val();

    var Q = $("#Qfield").val();
    if(Q == ""){
         $("#Qfield").val("null");
    }

    
//read the value for 'n'
var n = $("#nfield").val();

    var n = $("#nfield").val();
    if(n == ""){
         $("#nfield").val("null");
    }

    
//read the value for 'm'
var m = $("#mfield").val();

    var m = $("#mfield").val();
    if(m == ""){
         $("#mfield").val("null");
    }


//read the value for 'm1'
var m1 = $("#m1field").val();

    var m1 = $("#m1field").val();
    if(m1 == ""){
         $("#m1field").val("null");
    }
    

//read the value for 'm2'
var m2 = $("#m2field").val();

    var m2 = $("#m2field").val();
    if(m2 == ""){
         $("#m2field").val("null");
    }
    

//read the value for 'Sf'
var Sf = $("#Sffield").val();

    var Sf = $("#Sffield").val();
    if(Sf == ""){
         $("#Sffield").val("null");
    }

    

//read the value for 'y'
var y = $("#yfield").val();

    var y = $("#yfield").val();
    if(y == ""){
         $("#yfield").val("null");
    }

    
//read the value for 'b'
var b = $("#bfield").val();

    var b = $("#bfield").val();
    if(b == ""){
         $("#bfield").val("null");
    }

    
//read the value for 'Temp'
var Temp = $("#Tfield").val();

    var Temp = $("#Tfield").val();
    if(Temp == ""){
         $("#Tfield").val("null");
    }
    
    
//read the value for 'units'
var units = $("#unitsfield").val();


//read the value for 'type'
var type = $("#typefield").val();
    
    
//read the value for 'output'
var output = $("#outputfield").val();
    
//perform the request
var req = ocpu.rpc("Manningtrap", {
Q : Q,
n : n,
m : m,
m1 : m1,
m2: m2,
Sf : Sf,
y : y,
b : b,
Temp : Temp,
units : units,
type : type,
output : output
}, function(result){
$("#result").text(result.message);
});


//if R returns an error, alert the error message
req.fail(function(){
alert("Server error: " + req.responseText);
});

//after request complete, re-enable the button
req.always(function(){
$("#submitbutton").removeAttr("disabled")
});
});
});

执行 JavaScript 函数时(请参见下图显示表单结果),出现以下错误消息:

enter image description here

Server error: Either Q, n, m, m1, m2, Sf, b, or y is 0, NA, NaN, Inf, -Inf, empty, or a string. Please try again.
Backtrace:
[90m     [39m▆
[90m  1. [39m├─[1mevaluate[22m::evaluate(...)
[90m  2. [39m│ └─evaluate:::evaluate_call(...)
[90m  3. [39m│   ├─evaluate (local) timing_fn(...)
[90m  4. [39m│   ├─evaluate (local) handle(...)
[90m  5. [39m│   │ └─[1mbase[22m::try(f, silent = TRUE)
[90m  6. [39m│   │   └─base::tryCatch(...)
[90m  7. [39m│   │     └─base (local) tryCatchList(expr, classes, parentenv, handlers)
[90m  8. [39m│   │       └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
[90m  9. [39m│   │         └─base (local) doTryCatch(return(expr), name, parentenv, handler)
[90m 10. [39m│   ├─base::withCallingHandlers(...)
[90m 11. [39m│   ├─base::withVisible(...)
[90m 12. [39m│   └─[1mevaluate[22m:::eval_with_user_handlers(expr, envir, enclos, user_handlers)
[90m 13. [39m│     └─[1mbase[22m::eval(expr, envir, enclos)
[90m 14. [39m│       └─base::eval(expr, envir, enclos)
[90m 15. [39m│         └─iemisc::Manningtrap(...)
[90m 16. [39m│           └─[1massertthat[22m::assert_that(...)
[90m 17. [39m│             └─[1mbase[22m::stop(assertError(attr(res, "msg")))
[90m 18. [39m└─[1mevaluate[22m (local) `<fn>`(`<assrtErr>`)
[90m 19. [39m  └─output_handler$error(e)

在 Manningtrap 函数中,当函数调用中缺少 Temp、Q、m1 和 m2 参数时,这些参数在函数中定义为 Temp = NULL、Q = NULL、m1 = NULL 和 m2 = NULL。

在 JavaScript 函数中使用上述 NULL 值复制 Manningtrap 函数的最佳方法是什么?

r json opencpu

评论


答: 暂无答案