こちらがS言語のHello World!です。
print("Hello, World!")
S言語は、AT&Tベル研究所で開発されたデータ解析とグラフィックスのための高水準計算言語です。
現在、S言語を直接利用する機会は減り、S言語の文法を取り入れてオープンソースで開発されたR言語が統計解析の世界で広く使われています。R言語は、S言語とほぼ同等の機能を持つため、S言語の知識や資産はR言語へと受け継がれ、進化を続けています。
S言語とR言語で特に異なる部分はオブジェクトシステムです。S言語ではS4という厳密で形式化された新しいオブジェクト指向システムを導入しました。このS4システムはR言語にも引き継がれましたが、R言語ではS3システムも広く使われ続けています。
data.frame を継承したクラスを作成し、そこにsummaryメソッドを定義するソースコードをそれぞれの言語で書くとこのようになります。S言語はsetClassを使ってデータ構造と継承関係を厳密に定義している特徴が分かります。
# R言語
my_data <- data.frame(
id = c(1, 2, 3),
value = c(10, 20, 30)
)
class(my_data) <- c("my_class", "data.frame")
summary.my_class <- function(object, ...) {
cat("これはカスタムクラス 'my_class' の要約です。\n")
cat("IDの最大値:", max(object$id), "\n")
cat("Valueの平均値:", mean(object$value), "\n")
}
print("--- カスタムクラス (my_data) の要約 ---")
summary(my_data)
# S言語
setClass("MyS4Class",
representation(
id = "numeric",
value = "numeric"
),
contains = "data.frame"
)
setMethod("summary",
signature(object = "MyS4Class"),
function(object) {
cat("これは S4 クラス 'MyS4Class' の厳格な要約です。\n")
cat("IDの最大値:", max(object@id), "\n")
cat("Valueの平均値:", mean(object@value), "\n")
}
)
my_s4_object <- new("MyS4Class",
id = c(1, 2, 3),
value = c(10, 20, 30)
)
summary(my_s4_object)