R语言怎么写函数

最近新学统计R软件,可能问的问题有点小白。望大神见谅加耐心解答。先谢谢啦。
就是我不知道在哪里写R函数,是在New script中写然后调用还是直接在主面板写呢或者是其他?
先讲一下我现在失败的过程。现在已经有了一些现成的函数,打开New script,我复制黏贴到里面。然后保存成一个名字。
举个具体的例子!
下面图片里的程序我都写在了new script里面,保存的名字是bisect.R

然后在主框里输入f<-function(x) x^3-x-1
和fzero(f,1,2,1e-6)

然后输出
Error: could not find function "fzero"

然后忘记又输了什么了,就提示有好多错误。快绝望了!求帮助!

要把你的函数source进内存才能用,也可以把你定义函数的文件一行一行的执行,之后就可以用了。

不像matlab,会自己去找函数名。在R中,存在硬盘上的函数定义文件是没法用的……
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-01-05
R语言实际上是函数的集合,用户可以使用base,stats等包中的基本函数,也可以自己编写函数完成一定的功能。但是初学者往往认为编写R函数十分困难,或者难以理解。这里对如何编写R函数进行简要的介绍。
函数是对一些程序语句的封装。换句话说,编写函数,可以减少人们对重复代码书写,从而让R脚本程序更为简洁,高效。同时也增加了可读性。一个函数往往完成一项特定的功能。例如,求标准差sd,求平均值,求生物多样性指数等。R数据分析,就是依靠调用各种函数来完成的。但是编写函数也不是轻而易举就能完成的,需要首先经过大量的编程训练。特别是对R中数据的类型,逻辑判别、下标、循环等内容有一定了解之后,才好开始编写函数。
对于初学者来说,最好的方法就是研究现有的R函数。因为R程序包都是开源的,所有代码可见。研究现有的R函数能够使编程水平迅速提高。
R函数无需首先声明变量的类型,大部分情况下不需要进行初始化。一个完整的R函数,需要包括函数名称,函数声明,函数参数以及函数体几部分。
1.
函数名称,即要编写的函数名称,这一名称就作为将来调用R函数的依据。
2.
函数声明,包括
<-
function,
即声明该对象的类型为函数。
3.
函数参数,这里是输入的数据,函数参数是一个虚拟出来的一个对象。函数参数所等于的数据,就是在函数体内部将要处理的值,或者对应的数据类型。
函数体内部的程序语句进行数据处理,就是对参数的值进行处理
,这种处理只在调用函数的时候才会发生。函数的参数可以有多种类型。R
help的界面对每个函数,及其参数的意义及所需的数据类型都进行了说明。
4.
函数体
常常包括三部分.
(1).
异常处理
输入的数据不能满足函数计算的要求,或者类型不符,
这时候一定要设计相应的机制告诉用户,输入的数据在什么地方有错误。
错误又分为两种。
第一种,
如果输入的数据错误不是很严重,可以经过转换,变为符合处理要求的数据时,
此时只需要给用户一个提醒,告知数据类型不符,但是函数本身已经
进行了相应的转换。
第二种,数据完全不符合要求,这种情况下,就
要终止函数的运行,而告知因为什么,函数不能运行。这样,用户在
使用函数的情况先才不至于茫然。
(2).
运算过程
包括具体的运算步骤。
运算过程和该函数要完成的功能有关。
R运算过程中,应该尽量减少循环的使用,特别是嵌套循环。R提供了
apply,replicate等一系列函数,来代替循环,应该尽量应用这些函数,
提高效率。
如果在R中实在太慢,那么核心部分只能依靠C或者Fortran
等语言编写,然后再用R调用这些编译好的模块,达到更高的效率。
运算过程中,需要大量用到if等条件作为判别的标准。if和while都是需要数据TRUE/FALSE这样的逻辑类型变量,这就意味着,if内部,往往是对条件的判别,例如
is.na,
is.matrix,
is.numeric等等,或者对大小的比较,如,if(x
>
0),
if(x
==
1),
if(length(x)==
3)等等。if后面,如果是1行,则花括号可以省略,否则就必须要将所有的语句都放在花括号中。这和循环是一致的。
例子:
##
if与条件判断
fun.test
<-
function(a,
b,
method
=
"add"){
if(method
==
"add")
{
##
如果if或者for/while;
res
<-
a
+
b
##
等后面的语句只有一行,则无需使用花括号。
}
if(method
==
"subtract"){
res
<-
a
-
b
}
return(res)
##
返回值
}
###
检验结果
fun.test(a
=
10,
b
=
8,
method
=
"add")
fun.test(a
=
10,
b
=
8,
method
=
"substract")
第2个回答  推荐于2017-09-18
R语言实际上是函数的集合,用户可以使用base,stats等包中的基本函数,也可以自己编写函数完成一定的功能。但是初学者往往认为编写R函数十分困难,或者难以理解。这里对如何编写R函数进行简要的介绍。
函数是对一些程序语句的封装。换句话说,编写函数,可以减少人们对重复代码书写,从而让R脚本程序更为简洁,高效。同时也增加了可读性。一个函数往往完成一项特定的功能。例如,求标准差sd,求平均值,求生物多样性指数等。R数据分析,就是依靠调用各种函数来完成的。但是编写函数也不是轻而易举就能完成的,需要首先经过大量的编程训练。特别是对R中数据的类型,逻辑判别、下标、循环等内容有一定了解之后,才好开始编写函数。 对于初学者来说,最好的方法就是研究现有的R函数。因为R程序包都是开源的,所有代码可见。研究现有的R函数能够使编程水平迅速提高。
R函数无需首先声明变量的类型,大部分情况下不需要进行初始化。一个完整的R函数,需要包括函数名称,函数声明,函数参数以及函数体几部分。

1. 函数名称,即要编写的函数名称,这一名称就作为将来调用R函数的依据。
2. 函数声明,包括 <- function, 即声明该对象的类型为函数。
3. 函数参数,这里是输入的数据,函数参数是一个虚拟出来的一个对象。函数参数所等于的数据,就是在函数体内部将要处理的值,或者对应的数据类型。 函数体内部的程序语句进行数据处理,就是对参数的值进行处理 ,这种处理只在调用函数的时候才会发生。函数的参数可以有多种类型。R help的界面对每个函数,及其参数的意义及所需的数据类型都进行了说明。
4. 函数体
常常包括三部分.
(1). 异常处理
输入的数据不能满足函数计算的要求,或者类型不符, 这时候一定要设计相应的机制告诉用户,输入的数据在什么地方有错误。 错误又分为两种。
第一种, 如果输入的数据错误不是很严重,可以经过转换,变为符合处理要求的数据时, 此时只需要给用户一个提醒,告知数据类型不符,但是函数本身已经 进行了相应的转换。
第二种,数据完全不符合要求,这种情况下,就 要终止函数的运行,而告知因为什么,函数不能运行。这样,用户在 使用函数的情况先才不至于茫然。
(2). 运算过程
包括具体的运算步骤。 运算过程和该函数要完成的功能有关。
R运算过程中,应该尽量减少循环的使用,特别是嵌套循环。R提供了 apply,replicate等一系列函数,来代替循环,应该尽量应用这些函数, 提高效率。 如果在R中实在太慢,那么核心部分只能依靠C或者Fortran 等语言编写,然后再用R调用这些编译好的模块,达到更高的效率。
运算过程中,需要大量用到if等条件作为判别的标准。if和while都是需要数据TRUE/FALSE这样的逻辑类型变量,这就意味着,if内部,往往是对条件的判别,例如 is.na, is.matrix, is.numeric等等,或者对大小的比较,如,if(x > 0), if(x == 1), if(length(x)== 3)等等。if后面,如果是1行,则花括号可以省略,否则就必须要将所有的语句都放在花括号中。这和循环是一致的。

例子:
## if与条件判断
fun.test <- function(a, b, method = "add"){
if(method == "add") { ## 如果if或者for/while;
res <- a + b ## 等后面的语句只有一行,则无需使用花括号。
}
if(method == "subtract"){
res <- a - b
}
return(res) ## 返回值
}
### 检验结果
fun.test(a = 10, b = 8, method = "add")
fun.test(a = 10, b = 8, method = "substract")

如何使用R语言中的数学函数对数函数和指数函数
R语言中的数学函数除了三角函数之外,还有相应的指数函数和对数函数,常见的指数函数有exp,对数函数有log、log10。下面利用几个实例讲述指数函数和对数函数的用法,操作如下:第一步,相对于某个数值的什么数作为底的指数,使用的是log(x,n),如下图所示:第二步,log(x,n)对数函数的x和n可以取不...

函数怎么写 函数如何写
1、R语言实际上是函数的集合,用户可以使用base,stats等包中的基本函数,也可以自己编写函数完成一定的功能。但是初学者往往认为编写R函数十分困难,或者难以理解。这里对如何编写R函数进行简要的介绍。2、函数是对一些程序语句的封装。换句话说,编写函数,可以减少人们对重复代码书写,从而让R脚本程序更为...

在R语言中,怎么设函数判断字符串的大小
第一步,获取向量中的所有元素的的长度,可以使用nchar()函数,如下图所示:请点击输入图片描述 第二步,截取字符串的字串,可以使用substr()函数,如下图所示:请点击输入图片描述 第三步,判断某个字符串在某个向量的某个位置,使用grep()函数,如下图所示:请点击输入图片描述 第四步,将某个字符...

r语言 分段函数
y0){x=1cat("x>=",x,"\\n")}else{x=0cat("x>=",x,"\\n")}}y(任意x值)“绝对是正确的,我刚刚运算过了”

r语言中arctan怎么表示?
在R语言中,表示反正切函数(arctan 或 atan)可以使用 atan() 函数。例如,要计算一个数值 x 的反正切,可以调用 atan(x)。例如:Rx <- 2 result <- atan(x)print(result)在上面的例子中,atan(x) 将计算 x 的反正切,并将结果存储在 result 变量中。然后,print(result) 将输出计算结果...

R语言—seq()函数 、sample()函数、runif()函数
R语言中的seq()函数是一个强大的工具,它用于在指定范围内生成等差或等比的数字序列。使用语法seq(from, to, by),其中from是序列的起始值,to是结束值,by则是每个数之间的间隔,如by = (to - from) \/ (n - 1),n表示需要生成的数字个数。接下来是sample()函数,它用于从给定的向量中随机...

R语言table()函数
1,0,1,1)); (sum(diag(t))\/sum(t))值得注意的是,diag()函数在这里返回的是给定矩阵的主对角线元素,如果输入的是向量,它会生成一个对角矩阵,以这些元素填充对角线。通过这两个例子,我们可以看出table()函数在R语言中是如何帮助我们理解和分析数据分布,以及在评估分类模型性能时的实用性。

r语言计算概率的代码怎么写
大多数这种统计函数都有相似的形式,只需用d、p或者q去替代r,比如密度函数(dfunc(x, ...)),累计概率密度函数(也即分布函数)(pfunc(x,...))和分位数函数(qfunc(p, ...),0<p<1)。最后两个函数序列可以用来求统计假设检验中P值或临界值。例如,显著性水平为5%的正态分布的双侧临界值...

R语言多组样本的N种组合embed函数embed函数用法大全记住吧
在R语言中,可以使用 combn() 函数从一个向量中获得所有可能的元素组合:(All combinations of X elements of M are generated at one time).例如,我们现在有4种Stage分期,现在要得到所有可能的两两组合,以进行差异表达分析:labels = c(“I“, “II“, “III“, “IV“)res = t(combn...

R语言 请编写函数计算n的阶乘
function factorial(n){ return n > 1 ? n * factorial(n-1) : 1;}factorial(5);\/\/120 以上函数可以求简单的n的阶乘 由于使用的是原生的乘法,所以计算范围有限主要使用了递归的方式进行计算,是求阶乘的常用方法之一

相似回答