R 如何写一个方程作为函数参数?

R 如何写一个方程作为函数参数?,r,R,我创建的函数在我的计算机上正确运行。但是,我试图通过devtools::check_build()检查错误,而myeq参数有问题。字母d和h分别代表我的列simple1$Diameter(cm)和simple1$Height(m) indvol(x = simple1, mens="plot", myeq = 0.000065661*d^(2.475293)*h^(0.300022)) > head(simple1) Plot Individual

我创建的函数在我的计算机上正确运行。但是,我试图通过
devtools::check_build()
检查错误,而
myeq
参数有问题。字母
d
h
分别代表我的列
simple1$Diameter(cm)
simple1$Height(m)

indvol(x = simple1, mens="plot", myeq = 0.000065661*d^(2.475293)*h^(0.300022))


> head(simple1)
  Plot Individual               Specie Height (m) Diameter (cm)
1    1          1 Cariocar braziliense        7.5         22.60
2    1          1 Cariocar braziliense        7.5         25.78
3    1          1 Cariocar braziliense        7.5         46.15
4    1          1 Cariocar braziliense        7.5          9.55
5    1          2     Qualya parvifora        2.0          5.73
6    1          3    Magonia pubescens        4.0          5.73
出现以下错误:

Error in indvol(x = simple1, mens = "plot", myeq = 6.5661e-05 * d^(2.475293) *  : 
    object 'd' not found
  Execution halted
函数中处理
myeq
参数的部分是:

 if(mens=="plot"){
    colnames(x)[5]<-"d"
    colnames(x)[4]<-"h"

   d<-x[,5]
   h<-x[,4]
}

  x$`Volume (m3)` <- eval(substitute(myeq), envir=x); x
if(mens==“绘图”){

colnames(x)[5]您必须捕获表达式而不计算它。您可以使用
match.call()

indvol6 1 3 Magoni pubescens 4.0 5.73 0.007491927
不过,作为一个设计点,允许用户只使用传递到函数中的数据帧的列名可能更好


数据

simple1 <- structure(list(Plot = c(1L, 1L, 1L, 1L, 1L, 1L), Individual = c(1L, 
    1L, 1L, 1L, 2L, 3L), Specie = c("Cariocar braziliense", "Cariocar braziliense", 
    "Carioca braziliense", "Carioca braziliense", "Qualya parvifora", 
    "Magoni pubescens"), `Height (m)` = c(7.5, 7.5, 7.5, 7.5, 2, 4), 
    `Diameter (cm)` = c(22.6, 25.78, 46.15, 9.55, 5.73, 5.73)),
    class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))

simple1您必须捕获表达式而不计算它。您可以使用
match.call()

indvol6 1 3 Magoni pubescens 4.0 5.73 0.007491927
不过,作为一个设计点,允许用户只使用传递到函数中的数据帧的列名可能更好


数据

simple1 <- structure(list(Plot = c(1L, 1L, 1L, 1L, 1L, 1L), Individual = c(1L, 
    1L, 1L, 1L, 2L, 3L), Specie = c("Cariocar braziliense", "Cariocar braziliense", 
    "Carioca braziliense", "Carioca braziliense", "Qualya parvifora", 
    "Magoni pubescens"), `Height (m)` = c(7.5, 7.5, 7.5, 7.5, 2, 4), 
    `Diameter (cm)` = c(22.6, 25.78, 46.15, 9.55, 5.73, 5.73)),
    class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))

simple1 Allan,谢谢。但是错误仍然是一样的,没有找到我得到它的对象:
x$`Volume(m3)`@IgorCobelo上面的代码是一个reprex。这意味着,如果你从一个新的R会话开始,并完全使用此代码和数据,你将得到完全相同的结果。你使用了完全相同的代码还是试图在更长的函数中使用此代码?Allan,谢谢。但错误保持不变,没有找到我得到它的对象:
x$`Volume(m3)`@IgorCobelo上面的代码是一个reprex。这意味着如果您从一个新的R会话开始,并完全使用此代码和数据,您将得到完全相同的结果。您是否使用了完全相同的代码,或者您是否试图在更长的函数中使用此代码?