[R] データフレームをグルーピングして、sum,max 〜by関数編

SQLのgroup byのようにRのデータフレームをグルーピングして、sumやmaxを取るのに意外に手間取ってしまったので、メモ。

まず、データ

このようにA,B,Cとラベリングされたデータに対して、ラベルの値ごとにsumやmaxを取りたい。
label <- c("A", "B", "C", "A", "B", "C")
v1 <- c(1, 2, 3, 4, 5, 6)
v2 <- c(100, 200, 300, 400, 500, 600)
df <- data.frame(label, v1, v2)
df
   label v1  v2
 1     A  1 100
 2     B  2 200
 3     C  3 300
 4     A  4 400
 5     B  5 500
 6     C  6 600

[R] vectorとlistの関係

generic vector

Rのドキュメントを見ると、listの説明として、"Generic Vectors"という言葉が出てくる。

https://www.rdocumentation.org/packages/base/versions/3.4.3/topics/list

んー、なんだこれ。と思ったんだけど、vector関数の挙動を見たら、なんとなくわかったような気がする。

[Python] classメソッドとstaticメソッド

classメソッドとstaticメソッド

Pythonにはclassメソッドとstaticメソッドがあるけど、Javaなんかに慣れたプログラマーからすると、最初はわかりづらい。

具体的にはこんな感じ。

class.py
#!/usr/bin/python
class BaseClass:
  @classmethod
  def class_method(cls):
    print("class_method: {0}".format(cls))

  @staticmethod
  def static_method():
    print("static_method: {0}".format(BaseClass))

class SubClass(BaseClass):
  pass

BaseClass.class_method()
BaseClass.static_method()
SubClass.class_method()
SubClass.static_method()

[C] inline関数再び

インライン展開されない場合の挙動

以前、[C] ヘッダファイルで、関数マクロではなくstatic inline関数を使うでstatic inlineにすれば、関数名の競合が起こらないという記事を書いた。

この方法だと安全ではあるけど、インライン展開は必ずされるわけではないので、コンパイル時にインライン展開されなかった場合、各コンパイル単位で関数の実体が作られてしまう。
そうすると、ソースファイルが多い場合、バイナリファイルのサイズに影響を及ぼしてくる。