<- c(10, 20, 30, 40)
x x
[1] 10 20 30 40
基本パッケージとその文法
司馬 博文
5/07/2021
6/07/2024
バッチ処理はR CMD BATCH file.z
で行う.
When a user types a command at the prompt (or when an expression is read from a file) the first thing that happens to it is that the command is transformed by the parser into an internal representation. The evaluator executes parsed R expressions and returns the value of the expression. All expressions have a value. This is the core of the language. – R Language Definition
[1]
はすぐ隣の要素の index.ALGOL 系と違い,1から index する.
[1]
という行の名前の後に表示される,行列の行は[1,]
と indexing される.indexing の表示の違いでクラスの違いがわかる.()
も,直打ちも,generic function の神である print 関数を呼んでいる.getwd()
, setwd()
f(arg1=value1, arg2=value2)
+
などの二項演算子は”+”(1,2)
として使える.in
などの Condition Flow の宣言っぽい演算子も実装は関数.関数適用の大原則:リサイクル
logical の==
も,matrix(3,3,3)
も recycle される.
(1,2,3) == (2,3,4)
はベクトルの同一性を表さず,(F,F,F)
を返し,matrix(3,3,3)
は3でrecycleされた3×3行列.?Syntax
で演算の速さなどがわかる.
foo <- object
またはobject -> foo
<<-
は再帰的代入
=
は代入もできるthe operator
=
is only allowed at the top level (e.g., in the complete expression typed at the command prompt) or as one of the subexpressions in a braced list of expressions.
(object)
print(object)
と等価.console だと裸で良い.;
Operator | Description |
---|---|
- |
Minus, can be unary or binary |
+ |
Plus, can be unary or binary |
! |
Unary not |
~ |
Tilde, used for model formulae, can be either unary or binary |
? |
Help |
: |
Sequence, binary (in model formulae: interaction) |
* |
Multiplication, binary |
/ |
Division, binary |
^ |
Exponentiation, binary |
%x% |
Special binary operators, x can be replaced by any valid name |
%% |
Modulus, binary |
%/% |
Integer divide, binary |
%*% |
Matrix product, binary |
%o% |
Outer product, binary |
%x% |
Kronecker product, binary |
%in% |
Matching operator, binary (in model formulae: nesting) |
%||% |
Null coalescing operator, binary |
< |
Less than, binary |
> |
Greater than, binary |
== |
Equal to, binary |
>= |
Greater than or equal to, binary |
<= |
Less than or equal to, binary |
& |
And, binary, vectorized |
&& |
And, binary, not vectorized |
| |
Or, binary, vectorized |
|| |
Or, binary, not vectorized |
<- |
Left assignment, binary |
-> |
Right assignment, binary |
$ |
List subset, binary |
{suite}
:ブロック
ブロックは閉じるまで評価されない.
if
, else
, else if
:条件分岐
for
, while
, repeat
:反復
switch (statement, list)
:statement
を評価した結果得る数値を用いて,list
を indexing して(評価して)返す.
switch
は関数として実装されているが,「評価」のステップがあるために制御構文として使える.[1] -1.21239418 -0.42072586 0.93179085 0.70058355 0.03332041
関数型言語なので,forもifもfunctionも関数だと思った方がいい.()と{}を取り,{}はブロックの意味しか持たず,改行を挟まないなら省略して良い.(C, C++, Python, PerlなどのALGOL系と全く同じ).文は改行文字かセミコロンで区切る. なるべく制御(再帰構造)を避けるのが関数型言語としての目標になる.
Control 多分if(cond)というのは引数だ.全ての関数は引数を離して書いても良い.$も同様. 改行を経ないexprの併記は;を用いる.{}は改行を超えてコンパイラにまとまりを通知する.インデントは視認性以外の意味はなさそう.
valueについて:全部静かに返り値を返している * ifはcondの評価の結果をlogicalを返す * for, while, repeatはNULLを返す * break, nextはloopの中で制御を移すので,返り値は持たない.
function object を返す constructor
function(arglist) expr [return(value)] - arglistはname=exprの形のexpressionも許容. - exprの中に前の引数を入れてさえ良い. - 参照時,名前つき引数指定 option = value では、引数名 option は一意的に決定される限り、先頭の文字列だけを与えるだけで良い!!!何それwww - returnが関数とは.関数型言語 - valueもexpressionで良い. - returnを省略すると,最後になされた評価の値が返される.通常は実行時間が速くなるので省略されるが可読性は下がるかも. - valueを省略するとNULLが返される.
リストを引数として受け入れたい * 特殊引数… * この後に定義された引数は,keyword付きで参照しないとエラーになる.