知らなくても困らない, 忙しい人は読まないで, 暇なときに試してみると良いかも, 現実逃避になど...



回答を期待する記事は原則 Q&A (初級者コース)にお願いします。広く周知したい物はなんでも掲示板?の方へ、 「知らなくても困らない機能」はそれ以外の知らなくても困らないけど現実逃避等に最適な話題にすることを提案したいと思います。





(05)キーワードのヘルプ

ひつまぶし? (2007-09-01 (土) 14:21:04)

for や if などのヘルプを見るときには

> ? "for"

としなさいと書いてある。しかし,

> ? repeat""

としてもちゃんと動く。それでは,と思って以下のようにしたら,エラーになった(あたりまえだ)

> ? ""repeat
 エラー:syntax error

奇っ怪なことに,? repeat"" 以外は全部エラーになる ? for"" など

  • repeatは条件式が不要なので構文的に正しい。?while(1)1 など試すとよろしい。 -- takahashi? 2007-09-01 (土) 18:34:28
  • いろいろ試すと面白い。 -- 2007-09-01 (土) 19:59:18
    > ?qnorm(1)          OK
    > ?sin(1)            NG
    > ?matrix(1:4,2,2)   OK
  • これはもしかしてエラー時にヘルプドキュメントを最小のタイピングで参照するための隠し機能?そう思えば便利。 -- 2007-09-01 (土) 20:03:16
    > log(-0.3)
    [1] NaN
    Warning message:
     計算結果が NaN になりました in: log(x) 
    > ?log(-0.3)    # ヒストリ機能を使えばキー操作3回で入力できる!
  • ?はutils(question.R)に定義されたトリックな関数です(`?`バックチック等で挟むと見えます).構文が不完全な状態でも見たいとか○○なユーザを満足させるにはパーサー上で組み込むしかないです.;-p -- なかま 2007-09-03 (月) 09:18:22
  • 隠し機能ではなくちゃんと help(help) に説明がありましたね.S4 クラス・メソッドは独自のドキュメントを持つ機能がありますが、そうしたもの(メソッドと特定のタイプの引数の組合せに対するドキュメント)を参照するようです.ということは、三角関数で失敗するのは完全なS4化がされていないから?ついでに  class ? lm といった使いかたの解説もありました。 -- 2007-09-03 (月) 10:36:27
  • S4でもS3でも, 名前空間がある関数では問題は(たぶん!)無いです. 一部Primitiveな関数だけだと思います. "?1%*%1"は出るが,"?1%/%1"はでないとか. -- なかま 2007-09-03 (月) 13:54:04

(04)関数呼び出しの引数に=による代入構文

=はよいと思うが? (2007-05-28 (月) 16:12:39)

なんでか,突き詰めるのも面倒なのだが

> order(x=1:10)
 [1]  1  2  3  4  5  6  7  8  9 10
> x
 エラー: オブジェクト "x" は存在しません

となるが,

> order((x=1:10))
 [1]  1  2  3  4  5  6  7  8  9 10
> x
 [1]  1  2  3  4  5  6  7  8  9 10

となる不思議

> order({x=1:10})
 [1]  1  2  3  4  5  6  7  8  9 10
> x
 [1]  1  2  3  4  5  6  7  8  9 10

でも同じ。後者は ? "=" に書いてある。

> plot({x=1:10; y=x^2})
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> y
 [1]   1   4   9  16  25  36  49  64  81 100

などというのは,おもしろいですか?

  • ()や{}のときの環境に依存します. -- なかま 2007-05-31 (木) 12:00:12
    > f<-function(e=environment()){print(e);print(environment())}
    > f()
    <environment: 0x1278380>
    <environment: 0x1278380>
    > f(e=environment())
    <environment: R_GlobalEnv>
    <environment: 0xa84f80>
    > f((environment()))
    <environment: R_GlobalEnv>
    <environment: 0xa86c18>
    > f({environment()})
    <environment: R_GlobalEnv>
    <environment: 0xa8b4b0>
    ブレースや括弧はfunctionを評価するより前に評価されます. 例としてはよくありませんが, 良い例が思い付きません.(^_^;
  • 賞味期限ぎれコメント。order(x=10) はエラーですが同類の sort.list(x=1:10) はOK.これは sort.list 関数がもともと x という形式的引数をもつから。だから sort.list(y=1:10) はエラーになる。結局 foo(x=1:10) というコードは、形式的引数 x の実引数を 1:10 にする、x に 1:10 を代入してその返り値を foo の実引数にする、という二つの異なった意味に解釈できるので、曖昧さをなくすため、話題になったような挙動を取るようにしてあるのだと思います.実際 order(x <- 1:10) は正しく動作します.但し R の公式マニュアルのどこかに foo(x <- 1:10) という類のコードは使うなと注意がありました。もう一つ季節はずれのコメント.作図にかんしては plot({x=1:10; y=x^2}) は plot((1:10)^2) という意味にしかならない。 -- 2007-09-01 (土) 21:58:31

(03)`:='演算子(知らないとドツボにはまる落とし穴-5より転載)

なかま (2007-02-16 (金) 14:56:17)

パーサ上には定義されているが, 動作させる関数が定義されていない?謎の演算子.
もしかしたら, ちゃんと用途があるのかも知れないが, コードより多いRのドキュメント内には
見当たりません.(空目かも...)
Pascal風?に習って代入演算子に仕立ててみました.

":=" <- function (x, value)
{
    assign(deparse(substitute(x)), value, envir = parent.env(environment()))
}
hoge := runif(100) * 1000
  • パーサ上はLEFT_ASSIGNなので左辺に付値で間違いは無さそうです. -- なかま 2007-02-16 (金) 15:27:56

(02)総称関数の一覧

なかま (2006-02-02 (木) 11:13:12)

> names(.knownS3Generics)  # S3だけですが~
 [1] "Math"          "Ops"           "Summary"       "Complex"
 [5] "as.character"  "as.data.frame" "as.matrix"     "as.vector"
 [9] "labels"        "print"         "solve"         "summary"
[13] "t"             "edit"          "str"           "contour"
[17] "hist"          "identify"      "image"         "lines"
[21] "pairs"         "plot"          "points"        "text"
[25] "add1"          "AIC"           "anova"         "biplot"
[29] "coef"          "confint"       "deviance"      "df.residual"
[33] "drop1"         "extractAIC"    "fitted"        "formula"
[37] "logLik"        "model.frame"   "model.matrix"  "predict"
[41] "profile"       "qqnorm"        "residuals"     "se.contrast"
[45] "terms"         "update"        "vcov"

(01)閏秒

なかま (2006-01-30 (月) 10:21:40)

今年の元旦に挿入された閏秒のサポートは2.3.0以降です.

> .leap.seconds
 [1] "1972-07-01 09:00:00 JST" "1973-01-01 09:00:00 JST"
 [3] "1974-01-01 09:00:00 JST" "1975-01-01 09:00:00 JST"
 [5] "1976-01-01 09:00:00 JST" "1977-01-01 09:00:00 JST"
 [7] "1978-01-01 09:00:00 JST" "1979-01-01 09:00:00 JST"
 [9] "1980-01-01 09:00:00 JST" "1981-07-01 09:00:00 JST"
[11] "1983-07-01 09:00:00 JST" "1985-07-01 09:00:00 JST"
[13] "1986-07-01 09:00:00 JST" "1988-01-01 09:00:00 JST"
[15] "1990-01-01 09:00:00 JST" "1991-01-01 09:00:00 JST"
[17] "1992-07-01 09:00:00 JST" "1993-07-01 09:00:00 JST"
[19] "1994-07-01 09:00:00 JST" "1996-01-01 09:00:00 JST"
[21] "1997-07-01 09:00:00 JST" "1999-01-01 09:00:00 JST"



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Google
WWW を検索 OKADAJP.ORG を検索
Last-modified: 2015-03-01 (日) 01:15:59 (1718d)