用R:格式和语法编辑矩阵编写函数

时间:2015-10-04 19:31:46

标签: r matrix dataframe

我想编写一个执行以下操作的函数。它有两个参数,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”)
}
}

在我的机器上,它有时会编译并生成空矩阵,或者它只是不编译。我不太清楚错误在哪里,但我怀疑它在语法中。有人可以帮我确定什么是错的,并建议我需要做出哪些改变?或者它可能是我的逻辑?

1 个答案:

答案 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