【问题标题】:Evaluation of one input in a function with multiple inputs in R在 R 中评估具有多个输入的函数中的一个输入
【发布时间】:2022-01-10 07:56:06
【问题描述】:

我正在尝试执行以下操作,但无法弄清楚。有人可以帮帮我吗?

f <- expression(x^3+4*y)
df <- D(f,'x')

x <-0
df0 <- eval(df)

df0 应该是 y 的函数!

【问题讨论】:

    标签: r function derivative


    【解决方案1】:

    如果你对f 求导,则得到x,你得到3 * x^2。就x 而言,4*y 是一个常数。所以你没有y的函数,你的dfy的常数(尽管它是x的函数)。

    分配给x 不会改变df;它仍然是表达式 3 * x^2 并且仍然是 x 的函数,如果您想这样对待它。

    如果您想替换表达式中的变量,那么 substitute() 就是您要查找的内容。

    > substitute(3 * x^2, list(x = 0))
    3 * 0^2
    

    这是一个没有简化表达式的盲目替代——我们可能在这里预期为零,但我们得到 0 乘以 3——但这就是你得到的。

    不幸的是,用你在变量中的表达式替换有点麻烦,因为substitute() 认为它的第一个参数逐字表达式,所以你得到

    > substitute(df, list(x = 0))
    df
    

    表达式是df,其中没有x,因此没有任何内容被替换,您只需返回df

    你可以通过两个替换和一个 eval 来解决这个问题:

    > df0 <- eval(
    +   substitute(substitute(expr, list(x = 0)), 
    +             list(expr = df)))
    > df0
    3 * 0^2
    > eval(df0)
    [1] 0
    

    最外层的substitute()df 的值放入expr,因此您可以在那里得到正确的表达式,而内部的substitute() 会改变x 的值。

    Tidyverse 中有更好的操作表达式的函数,但我不记得它们了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2019-05-03
      • 2021-06-06
      相关资源
      最近更新 更多