r - 如何将公式转换为函数,或将公式应用于某些值?

标签 r function dataframe formula

我有一个函数需要期待 formula作为输入,形式为 y~x , 例如。然后,我需要传递一系列 x-values进入那个公式得到y的。

例如,如果我的公式是 y~x^2 ,并且我的 x 值系列是 (1,2,3,4),那么我应该期望 (1,4,9,16) 作为输出。

假设我有这样的公式:formula1 <- y~x :

这是我迄今为止尝试过的:

  • 将公式转换为函数:as.function(formula1)
  • 使用 model.framemodel.matrix像这样:

  • 像这样:
    formula1 <- y~x^2 
    x <- c(1,2,3,4)
    my_data <- data.frame("x" = x, "y" = rep(0,length(x))) 
    model_frame <- model.frame(formula1, data = my_data)
    my_design_matrix <- model.matrix(formula1, model_frame)
    
  • 我尝试使用 nls2,但我没有任何要优化的参数,所以我不明白这一点。

  • 我可以用什么来做这个?

    以下是我咨询的资源:
    How to apply a formula to a vector in R?

    Pass formula to function in R?

    最佳答案

    我不确定这是否是最优雅的方式,但它应该按照您的要求进行:

    这个想法是提取公式对象的右侧并将其解析为字符串。然后可以评估结果。

    as.function <- function(formula) {
        cmd <- tail(as.character(formula),1)
        exp <- parse(text=cmd)
        function(...) eval(exp, list(...))
    }
    

    但请注意,有些有效公式可能无法以这种方式计算,例如 y ~ a:c .

    这给了我们
    > f <- as.function(y ~ x^2)
    > f(x=1:10)
     [1]   1   4   9  16  25  36  49  64  81 100
    

    如果您想将 data.frame 提交给生成的函数,您可以这样做
    as.function <- function(formula) {
        cmd <- tail(as.character(formula),1)
        exp <- parse(text=cmd)
        function(df) eval(exp, df)
    }
    

    并得到
    > f <- as.function(y ~ x^2)
    > f(data.frame(x=1:10))
     [1]   1   4   9  16  25  36  49  64  81 100
    

    关于r - 如何将公式转换为函数,或将公式应用于某些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36680774/

    相关文章:

    如果值更大或更小,则替换数据框中的值

    r - 如何在R中使用stemDocument?

    javascript - 未捕获的语法错误 : Unexpected token return - still no answer?

    在函数中作为结构体传递并返回后创建 C 库

    python - Pandas 数据帧 : Creating a new column based on data from other columns

    python - 将字典转换为数据帧,其中键和值都有自己的列

    javascript - Google Analytics for Shiny Dashboard App

    R 和 dplyr : group by value ranges

    c - 如何编写一个 C 函数来不断读取一组行并标记行的长度

    python - 如何使用python从以列中的数字开头的字符串中提取数字