MATLAB/R ¡Dic,onary ¡ R ¡meetup ¡NYC ¡ January ¡7, ¡2010 ¡
Harlan ¡Harris ¡ harlan@harris.name ¡ @HarlanH ¡ Marck ¡Vaisman ¡ marck@vaisman.us ¡ @wahalulu ¡
MATLAB ¡and ¡the ¡MATLAB ¡logo ¡are ¡registered ¡trademarks ¡of ¡The ¡Mathworks. ¡
MATLAB/R Dic,onary R meetup NYC January 7, 2010 Harlan - - PowerPoint PPT Presentation
MATLAB/R Dic,onary R meetup NYC January 7, 2010 Harlan Harris harlan@harris.name @HarlanH Marck Vaisman marck@vaisman.us @wahalulu MATLAB and the MATLAB
Harlan ¡Harris ¡ harlan@harris.name ¡ @HarlanH ¡ Marck ¡Vaisman ¡ marck@vaisman.us ¡ @wahalulu ¡
MATLAB ¡and ¡the ¡MATLAB ¡logo ¡are ¡registered ¡trademarks ¡of ¡The ¡Mathworks. ¡
Task ¡ Create ¡a ¡row ¡vector ¡
v ¡= ¡[1 ¡2 ¡3 ¡4] ¡ v<-‑c(1,2,3,4) ¡
Create ¡a ¡column ¡vector ¡
v=[1;2;3;4] ¡or ¡v=[1 ¡2 ¡3 ¡4]’ ¡ v<-‑c(1,2,3,4) ¡ ¡ Note: ¡R ¡does ¡not ¡distinguish ¡ between ¡row ¡and ¡column ¡vectors ¡
Enter ¡a ¡matrix ¡A ¡
A=[1 ¡2 ¡3; ¡4 ¡5 ¡6] ¡ Enter ¡values ¡by ¡row: ¡ A<-‑matrix(c(1,2,3,4,5,6), ¡ nrow=2, ¡byrow=TRUE) ¡ Enter ¡values ¡by ¡column: ¡ A<-‑matrix(c(1,4,2,5,3,6), ¡ nrow=2) ¡
Access ¡third ¡element ¡of ¡vector ¡v ¡
v(3) ¡ v[3] ¡or ¡v[[3]] ¡
Access ¡element ¡of ¡matrix ¡A ¡
A(2,3) ¡ A[2,3] ¡
“Glue” ¡two ¡matrices ¡a1 ¡and ¡a2, ¡ same ¡number ¡of ¡rows, ¡side ¡by ¡side ¡
A=[a1 ¡a2] ¡ A<-‑cbind(a1,a2) ¡
“Stack” ¡two ¡matrices ¡a1 ¡and ¡a2, ¡ same ¡number ¡of ¡columns ¡
A=[a1;a2] ¡ A<-‑rbind(a1,a2) ¡
Reshape* ¡matrix ¡A, ¡making ¡it ¡an ¡m ¡ x ¡n ¡matrix ¡with ¡elements ¡taken ¡ columnwise ¡from ¡A ¡
A=reshape(A,m,n) ¡ dim(A)<-‑c(m,n) ¡
Task ¡ Assignment ¡
= ¡ <-‑ ¡or ¡= ¡
Whole ¡Matrix ¡ ¡Opera,ons: ¡
Multiplication: ¡A*B ¡ Square ¡the ¡matrix: ¡A^2 ¡ Raise ¡to ¡power ¡k: ¡A^k ¡ A ¡%*% ¡B ¡ A ¡%*% ¡A ¡ A ¡%*% ¡A ¡%*% ¡A ¡… ¡ ¡
Element-‑by-‑element ¡ Opera,ons: ¡
A.*B ¡ A./B ¡ A.^k ¡ A*B ¡ A/B ¡ A^k ¡
Compute ¡A-‑1B ¡
A\B ¡ A%*% ¡solve(B) ¡
Sums ¡
Columns ¡of ¡matrix: ¡sum(A) ¡ Rows ¡of ¡matrix: ¡sum(A,2) ¡ colSums(A) ¡ rowSums(A) ¡
Logical ¡operators ¡(element-‑by-‑ element ¡on ¡vectors/matrices) ¡
a ¡< ¡b, ¡a ¡> ¡b, ¡a ¡<= ¡b, ¡a ¡>= ¡b ¡ a ¡== ¡b ¡ a ¡~= ¡b ¡ AND: ¡a ¡&& ¡b ¡ OR: ¡a ¡|| ¡b ¡ XOR: ¡xor(a,b) ¡ NOT: ¡~a ¡ a ¡< ¡b, ¡a ¡> ¡b, ¡a ¡<= ¡b, ¡a ¡>= ¡b ¡ a ¡== ¡b ¡ a ¡!= ¡b ¡ AND: ¡a ¡&& ¡b ¡(short-‑circuit) ¡ ¡ ¡ ¡ ¡ ¡a ¡& ¡b ¡(element-‑wise) ¡ OR: ¡a ¡|| ¡b ¡ ¡ ¡ ¡ ¡a ¡| ¡b ¡ XOR: ¡xor(a,b) ¡ NOT: ¡!a ¡
Task ¡
Build ¡a ¡structure ¡v ¡of ¡length ¡n, ¡ capable ¡of ¡containing ¡different ¡ data ¡types ¡in ¡different ¡elements. ¡ MATLAB: ¡cell ¡array ¡ R: ¡list ¡
v=cell(1,n) ¡In ¡general, ¡cell (m,n) ¡makes ¡an ¡m ¡× ¡n ¡cell ¡
v{1}=12 ¡ v{2}=’hi ¡there’ ¡ v{3}=rand(3) ¡ v<-‑vector(’list’,n) ¡ ¡ Then ¡you ¡can ¡do ¡e.g.: ¡ v[[1]]<-‑12 ¡ v[[2]]<-‑’hi ¡there’ ¡ v[[3]]<-‑matrix(runif(9),3) ¡
Create ¡a ¡matrix-‑like ¡object ¡with ¡ different ¡named ¡columns. ¡ MATLAB: ¡struct ¡array ¡ R: ¡data.frame ¡
avals=2*ones(1,6); ¡ yvals=6:-‑1:1; ¡v=[1 ¡5 ¡3 ¡2 ¡3 ¡7]; ¡ d=struct(’a’, ¡avals, ¡ ’yy’, ¡yyvals, ¡’fac’, ¡v); ¡ v<-‑c(1,5,3,2,3,7) ¡ d<-‑data.frame(cbind(a=2, ¡ yy=6:1), ¡v) ¡
Task ¡ for ¡loops ¡over ¡values ¡in ¡vector ¡ v ¡
for ¡i=v ¡ ¡command1 ¡ ¡command2 ¡ end ¡ If ¡only ¡one ¡command: ¡ for ¡(i ¡in ¡v) ¡ ¡command ¡ If ¡multiple ¡commands: ¡ for ¡(i ¡in ¡v) ¡{ ¡ ¡command1 ¡ ¡command2 ¡ } ¡
If/else ¡statement ¡ ¡
if ¡cond ¡ ¡command1 ¡ ¡command2 ¡ else ¡ ¡command3 ¡ ¡command4 ¡ end ¡ MATLAB ¡also ¡has ¡the ¡elseif ¡
if ¡(cond) ¡{ ¡ ¡command1 ¡ ¡command2 ¡ } ¡else ¡{ ¡ ¡command3 ¡ ¡command4 ¡ } ¡ R ¡uses ¡chained ¡“else ¡if” ¡
ifelse() ¡func,on ¡ ¡
> ¡print(ifelse(c(T,F), ¡2, ¡3)) ¡ [1] ¡2 ¡3 ¡
Task ¡ Get ¡help ¡on ¡a ¡func,on ¡
help ¡fminsearch ¡ help(pmin) ¡ ¡or ¡ ?pmin ¡
Search ¡the ¡help ¡for ¡a ¡word ¡
lookfor ¡inverse ¡ ??inverse ¡
Describe ¡a ¡variable ¡
class(a) ¡ class(a) ¡ str(a) ¡
Show ¡variables ¡in ¡environment ¡
who ¡ ls() ¡
Underlying ¡type ¡of ¡variable ¡
whos(‘a’) ¡ typeof(a) ¡
Fisher ¡Iris ¡Dataset ¡ sepal_length,sepal_width,petal_length,petal_width,species ¡ 5.1,3.5,1.4,0.2,setosa ¡ 4.9,3.0,1.4,0.2,setosa ¡ 4.7,3.2,1.3,0.2,setosa ¡ 4.6,3.1,1.5,0.2,setosa ¡ … ¡
Scrip,ng, ¡real-‑,me ¡analysis ¡ Scrip,ng, ¡real-‑,me ¡analysis ¡ File-‑based ¡environments ¡ Files ¡unimportant ¡ Impera,ve ¡programming ¡style ¡ Func,onal ¡programming ¡style ¡(impure) ¡ Sta,cally ¡scoped ¡ Dynamically ¡scoped ¡ Func,ons ¡with ¡mul,ple ¡return ¡values ¡ Func,ons ¡with ¡named ¡arguments, ¡lazy ¡ evalua,on ¡ Evolving ¡OOP ¡system ¡ Mul,ple ¡compe,ng ¡OOP ¡systems ¡ Can ¡be ¡compiled ¡ Cannot ¡be ¡compiled ¡ Large ¡library ¡of ¡func,ons ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Professional ¡developed, ¡cost ¡money ¡ Large ¡library ¡of ¡func,ons ¡ Varying ¡quality ¡and ¡support ¡ Can ¡embed ¡(in) ¡many ¡other ¡languages ¡ Can ¡embed ¡(in) ¡many ¡other ¡languages ¡
function ¡[a, ¡b] ¡= ¡minmax(z) ¡ ¡ ¡% ¡one ¡function ¡per ¡.m ¡file! ¡ ¡ ¡% ¡assign ¡to ¡formal ¡return ¡names ¡ ¡ ¡a ¡= ¡min(z) ¡ ¡ ¡b ¡= ¡max(z) ¡ end ¡ % ¡if ¡minmax.m ¡in ¡path ¡ [smallest, ¡largest] ¡= ¡… ¡ ¡minmax([1 ¡30 ¡3]) ¡ minmax ¡<-‑ ¡function(c, ¡opt=12) ¡{ ¡ ¡ ¡# ¡functions ¡are ¡assigned ¡to ¡ ¡ ¡# ¡variables ¡ ¡ ¡ret ¡<-‑ ¡list(min ¡= ¡min(z), ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡max ¡= ¡max(z)) ¡ ¡ ¡ret ¡ ¡ ¡ ¡# ¡last ¡statement ¡is ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡# ¡return ¡value ¡ } ¡ # ¡if ¡minmax ¡was ¡created ¡in ¡current ¡ # ¡environment ¡ x ¡<-‑ ¡minmax(c(1, ¡30, ¡3)) ¡ smallest ¡<-‑ ¡x$min ¡