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会话开始,并完全使用此代码和数据,您将得到完全相同的结果。您是否使用了完全相同的代码,或者您是否试图在更长的函数中使用此代码?