【问题标题】:how to make a dataframe as input to function with apply family function如何将数据框作为输入以使用应用系列功能
【发布时间】:2018-03-03 01:32:18
【问题描述】:

我有一个方程要用uniroot.all 求解,数据框作为输入参数。

数据框如下:

   T  L        f
1  0 10  6.59710
2  0 10  8.01847
3  0 10  9.21858
4  0 10 10.27676
5  0 10 11.23392
6  0 10 12.1144

输入到uniroot.all 的方程式如下:

eqnt <- function(T,l,f)
{    
   T^2 + T*l - f^2
}

sapply(???, uniroot.all(eqnt, ??? ))

如何将数据框作为输入,将族函数应用于uniroot.all,以便在不使用循环结构的情况下求解方程?

【问题讨论】:

  • 如果我理解正确,您想对 data.frame 的行进行应用,此处已回答:mapping over the rows of a data frame
  • 根据docs,大多数函数都有一个x 变量,就像代数函数一样。你在哪里,因为你只传递值?
  • @Bulat 这就是我期望的答案,比你非常多!

标签: r sapply


【解决方案1】:

在将列名更改为 'eqnt` 中的输入参数后,一个选项是 pmap 来自 purrr

library(purrr)
library(dplyr)
library(rootSolve)
eqnt2 <- function(T, L, f){
     T^2 + T*L - f^2
 }
f2 <- function(x) pmap_dbl(df1, eqnt2)
uniroot.all(f2(), c(1,1000))
#[1]   5.653842  50.894856  51.713343  80.233553  81.052066 130.499036 131.317548 170.275345 183.660221 220.540822
#[11] 221.359340 300.145034 300.963560 337.844129 351.229033 390.186832 397.288528 440.452315 441.270803 469.791045
#[21] 470.609559 520.056547 520.875023 559.832862 573.217719 610.098309 610.916833 689.702528 690.521045 727.401642
#[31] 740.786526 779.744321 786.846019 830.009802 830.828289 859.348536 860.167027 909.614015 910.432530 949.390352
#[41] 960.697992 999.655804

或者我们可以使用base R中的apply

eqnt <- function(x) {

   x[1]^2 + x[1]*x[2] - x[3]^2   
}

library(rootSolve)
uniroot.all(apply(df1, 1, eqnt), c(1, 1000))
#[1]   5.653842  50.894856  51.713343  80.233553  81.052066 130.499036 131.317548 170.275345 183.660221 220.540822
#[11] 221.359340 300.145034 300.963560 337.844129 351.229033 390.186832 397.288528 440.452315 441.270803 469.791045
#[21] 470.609559 520.056547 520.875023 559.832862 573.217719 610.098309 610.916833 689.702528 690.521045 727.401642
#[31] 740.786526 779.744321 786.846019 830.009802 830.828289 859.348536 860.167027 909.614015 910.432530 949.390352
#[41] 960.697992 999.655804

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2021-11-21
    • 2020-03-05
    相关资源
    最近更新 更多