首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么代码只适用于数字,而不适用于字母?

为什么代码只适用于数字,而不适用于字母?
EN

Stack Overflow用户
提问于 2020-06-13 22:12:59
回答 1查看 43关注 0票数 0

我不得不使用下面的代码,但我不完全理解它是如何工作的。如果我把du.4改成du.f,然后在调用函数时使用f,为什么它不起作用?出于某种原因,它只适用于数字,我不明白为什么。

这是它在du.f的情况下给出的错误

代码语言:javascript
运行
复制
Error in paste("Meth1=", nr, ".ps", sep = "") : object 'f' not found
代码语言:javascript
运行
复制
du.4 <- function(u,v,a){(exp(a)*(-1+exp(a*v)))/(-exp(a)+exp(a+a*u)-exp(a*(u+v))+exp(a+a*v))}

plotmeth1 <- function(data1,data2,alpha,nr) {
     psfile <-paste("Meth1=",nr,".ps",sep="")
     diffmethod <-paste("du.",nr,sep="")
     title=paste("Family",nr)
     alphavalue <-paste("alpha=",round(alpha,digits=3),sep="")
     #message=c("no message")
     postscript(psfile)
     data3<-sort(eval(call(diffmethod,data1,data2,alpha)))
     diffdata <-data3[!is.na(data3)]
     #if(length(data3)>length(diffdata))
     #{message=paste("Family ",nr,"contains NA!")}
     tq <-((1:length(diffdata))/(length(diffdata)+1))
     plot(diffdata,tq,main=title,xlab="C1[F(x),G(y)]",ylab="U(0,1)",type="l")
     legend(0.6,0.3,c(alphavalue))
     abline(0,1)
     #dev.off()
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-13 23:13:15

在R中,点只用作标识符中的另一个字符。为了清晰起见,它经常被使用,但在将点之后的部分定义为由点之前的标识符部分给定的名称空间中时,没有正式的函数。在像du.f这样的东西中,您不能仅通过f来引用函数,即使您的计算是在名为du的环境中进行的。当然,您可以定义一个名为du.4的函数,然后单独使用4,但是这样做时,您使用的数字4只是一个数字,而不是对该函数的引用。例如,如果

代码语言:javascript
运行
复制
du.4 <- function(u,v,a){(exp(a)*(-1+exp(a*v)))/(-exp(a)+exp(a+a*u)-exp(a*(u+v))+exp(a+a*v))}

du.4(1,2,3)的计算结果为21.08554,但尝试使用4(1,2,3)时会抛出错误

代码语言:javascript
运行
复制
Error: attempt to apply non-function

在您的代码中,您将使用paste将函数名组装为要传递给eval的字符串。将文字数字4粘贴到字符串'du.'上是有意义的(因为粘贴会将4转换为字符串'4'),但是将一个未定义的f粘贴到'du.'上则没有意义。但是,将文字字符串'f'粘贴到'du.'上是有意义的,这样即使plotmeth1 (data1, data2, alpha, f)失败,函数调用plotmeth1 (data1, data2, alpha, 'f')也能正常工作。

有关在R标识符中使用点的更多信息,请参阅this question

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62360953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档