我想编写一个执行以下操作的函数。它有两个参数,arg1和arg2,arg2的默认值设置为1.当调用该函数时,用户将数据框/矩阵分配给arg 1并将arg2分配给1,2或3.
如果为arg1赋值1,则该函数返回带有所有列名
的向量如果arg 2被赋值为2,则该函数返回每列的平均值
如果为arg2赋值3,则该函数返回每一行的中位数。
如果arg2被分配了1,2或3之外的任何内容,则该函数会输出错误消息。
到目前为止,这是我的代码:
my_Func1<-function(arg1)
A<-data.matrix(arg1)
if(arg2==1){
return(colnames(arg1))
}
else {arg2==2){
colMeans(A)
}
else{arg2==3){
rowMedians(A)
}
else if (missing(arg2))
writeLines(“ The value must be 1, 2, or 3”)
}
}
在我的机器上,它有时会编译并生成空矩阵,或者它只是不编译。我不太清楚错误在哪里,但我怀疑它在语法中。有人可以帮我确定什么是错的,并建议我需要做出哪些改变?或者它可能是我的逻辑?
答案 0 :(得分:1)
以下似乎正在起作用:
library(matrixStats) #for rowMedians
my_Func1<-function(arg1, arg2=1){
A<-data.matrix(arg1)
if(arg2==1){
return(colnames(arg1))
}
else if (arg2==2){
colMeans(A)
}
else if (arg2==3){
rowMedians(A)
#or use apply(A, 1, median)
#if you don't want to use the matrixStats package
#result is the same
}
else{
stop("The value must be 1, 2, or 3")
}
}
举个例子:
df <- data.frame(a=runif(100), b=runif(100))
输出:
#returns colnames
my_Func1(df)
[1] "a" "b"
#returns col means
my_Func1(df,2)
a b
0.5115115 0.5179713
#returns rowMedians
my_Func1(df,3)
[1] 0.6095942 0.8047744 0.9322312 0.7202797 0.4061614 0.9268534 0.6453481 0.6332645 0.3356115 0.6845784 0.3562386 0.8149613 0.3368132
[14] 0.3943005 0.4082845 0.6249351 0.7483373 0.7649562 0.5062454 0.4025369 0.4864001 0.4748679 0.5620104 0.9720910 0.3495394 0.8274248
[27] 0.4315357 0.2935979 0.4365097 0.6043698 0.4077471 0.2718737 0.6230104 0.5795740 0.3220522 0.3377562 0.4806867 0.4550451 0.8740976
[40] 0.7058154 0.4779405 0.5774614 0.6220152 0.4811471 0.3716731 0.4404327 0.6374183 0.4995577 0.2696681 0.5154605 0.1612755 0.5637899
[53] 0.5148926 0.2683836 0.5989326 0.5168307 0.6084937 0.1851450 0.8010263 0.4063176 0.2227938 0.5751372 0.4599596 0.4134101 0.6519764
[66] 0.7971018 0.3114643 0.2374720 0.8218233 0.9588351 0.7158696 0.6633277 0.4514450 0.2356745 0.5297823 0.4686703 0.3113826 0.2800651
[79] 0.4709474 0.4831431 0.3746795 0.2379049 0.2086487 0.2870380 0.6961195 0.6039862 0.5702595 0.7620196 0.5670314 0.4874534 0.2331586
[92] 0.4843724 0.6366822 0.5150960 0.4336061 0.2913745 0.4006255 0.4996965 0.6356846 0.4182479
#returns error
my_Func1(pval,4)
Error in my_Func1(df, 4) : The value must be 1, 2, or 3
在您的代码中,您使用的是else
而不是else if
,并且您还打开了大括号{
并使用方括号)
关闭它们。此外,如果你想要一个错误,如果参数2不是1或2或3,那么你需要函数stop
。