gpt4 book ai didi

javascript - 是否有可能在 Javascript 或 Python 中在 R 中实现类似 "non standard evaluation"的东西?

转载 作者:行者123 更新时间:2023-12-03 17:13:42 25 4
gpt4 key购买 nike

在 R 中,您可以编写允许参数成为预定义对象的不带引号的属性的函数。例如,DataFrame 对象的接口(interface)允许以下内容:

# df has columns "A" and "B"
df = mutate(df, C=A*B)

现在 df有一个新列“C”,它是列“A”和“B”的乘积。

还有未引用的“公式”类型:
lm(data=df, A~B)

这就是“非标准评价”。
  • http://adv-r.had.co.nz/Computing-on-the-language.html#capturing-expressions
  • https://cran.r-project.org/web/packages/lazyeval/vignettes/lazyeval.html

  • 是否可以在 Javascript 或 Python 中做类似的事情。

    最佳答案

    不,在 Python 和 JavaScript 中不可能有 NSE。

    这是为什么?这是因为在 Python 和 JS 中,参数在传递给函数之前会被评估,而在 R 中并非如此。

    让我们考虑一下 R 和 Python 中的两个相似代码:
    主要的R

    enthusiastic_print <- function(x) {
    print("Welcome!")
    print(x)
    }

    enthusiastic_print("a" + 3)
    主文件
    def enthusiastic_print(x):
    print("Welcome!")
    print(x)
    }

    enthusiastic_print("a" + 3)
    它们都会产生错误。但是现在,让我们看看错误发生的时间:
    .R
    [1] "Welcome!"
    Error in "a" + 3 : non-numeric argument to binary operator
    exit status 1
    .py
    Traceback (most recent call last):
    File "main.py", line 6, in <module>
    enthusiastic_print("a" + 3)
    TypeError: can only concatenate str (not "int") to str
    您可以看到 Python 在调用之前评估传递给函数的内容。而 R, 保留完整的表达式作为参数传递,并仅在必要时对其进行评估。

    您甚至可以在 R 中编写不会产生错误的代码:
    foo <- function(x) {
    print("Welcome in foo!")
    print("I never mess with args...")
    }

    foo("a" + 3)

    您还可以捕获作为参数传递的内容而不对其进行评估:
    verbatim_arg <- function(x) {
    print(substitute(x))
    }

    verbatim_arg("a" + 3)
    产生:
    "a" + 3

    最后,就是函数 substitute()结合 eval()允许使用公式和所有其他 NSE 东西。

    补充:
    你可以在 node.js 中做同样的测试
    function enthusiastic_print(x) {
    console.log("Welcome!")
    console.log(x)
    }

    enthusiastic_print("a".notAMethod())

    关于javascript - 是否有可能在 Javascript 或 Python 中在 R 中实现类似 "non standard evaluation"的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56624460/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com