- 追加された行はこの色です。
- 削除された行はこの色です。
[[Rの備忘録]]
演算子を呼ばれる関数群がある.要するに 1 + 2 の + のような使い方をする関数である.
.Primitive
> `+` # ` はシフトを押しながら @ を押す
function (e1, e2) .Primitive("+")
既存のデータフレームに要素を追加する時は`$<-.data.frame` が呼ばれる.この定義は以下の通り.
> `$<-.data.frame`
function (x, i, value)
{
cl <- oldClass(x)
class(x) <- NULL
nrows <- .row_names_info(x, 2L)
if (!is.null(value)) {
N <- NROW(value)
if (N > nrows)
stop(gettextf("replacement has %d rows, data has %d",
N, nrows), domain = NA)
if (N < nrows && N > 0L)
if (nrows%%N == 0L && length(dim(value)) <= 1L)
value <- rep(value, length.out = nrows)
else stop(gettextf("replacement has %d rows, data has %d",
N, nrows), domain = NA)
if (is.atomic(value))
names(value) <- NULL
}
x[[i]] <- value
class(x) <- cl
return(x)
}
<environment: namespace:base>
ところが,data.frame() は,長いのでざっとみただけだが,オブジェクトのクラス判定なども行っているようだ.だから,データフレームにリストである POSIXit 要素を追加しようとすると次のようなエラーに見舞われる.
> (t <- strptime(paste("1-1-2001 9", 1:20, sep=":"),
"%m-%d-%Y %H:%M"))
> d1 <- data.frame(a=1:20)
> d1$b <- t
以下にエラー `$<-.data.frame`(`*tmp*`, "b", value = list(sec =
c(0, 0, 0, :
replacement has 9 rows, data has 20