トップ > サポート > ご利用での Q&A > 一般利用編

一般利用編

は Windows 版固有、 は UNIX 版固有、 は Linux 版固有、 は S-PLUS 2000 版固有の問題です。

質問 一覧

S-PLUS を導入したが、まだ何も知らない。何から始めれば良いか。

「S-PLUS for Windows ユーザーズガイド」 の第3章「チュートリアル」をご覧ください。簡単なクイックツアーが記述されています。

UNIX 版 S-PLUS をご利用の方、S言語を覚えようという方

「S言語1」(青い本)の第1章をご覧ください。テキストにそって、同様にコマンドを入力してみてください。

ある日突然 "Looking for object.." という Warning が出始めて止まらない。

この Warning は、ユーザー作成オブジェクト(データ)を、うっかりシステムのオブジェクトと同じ名前で作成してしまったときにしばしば発生します。objects() を実行して、それらしい名称のオブジェクトが出来ていないか確認してみてください。もし該当するオブジェクトがある場合は、そのオブジェクトを関数 rm で消去してください。

もっとも多いのは "c" という名前のオブジェクトを作成してしまったケースです。

c は S-PLUS の中でしばしば使われる基本的な関数です。この他、t や q といった一文字のオブジェクトを作成しないように気をつけてください。

どうしても Warning が消えないときは、UNIX コマンドや Windows のエクスプローラを使って作業ディレクトリ自体を一たん mv した上で、再起動してみてください。

Example :
% Splus
S-PLUS : Copyright (c) 1988, 1996 MathSoft, Inc.
Copyright (c) 1996 Mathematical Systems, Inc.
S : Copyright AT&T.
Version 3.3J Release 1 for Sun SPARC, SunOS 4.1.x : 1996
Working data will be in .Data
Warning messages:
Looking for object "c" of mode "function", ignored one of mode "numeric" in:
script.compatible()
> objects()
[1] ".Last.value" ".Random.seed"
[3] "c" "x"
> rm(c)
# 次回起動時から正常に戻る

エディタを標準の vi でなく emacs を使いたい。

UNIX 版 S-PLUS では通常デフォルトエディタは vi に設定されています。関数 options() を利用して、エディタを変更することができます。

Example :
> options()$editor
[1] "vi"
> options(editor="emacs")
# デフォルトエディタをemacsに変更
> fix(myfunction)
# 関数myfunctionを編集

エディタを標準のノートパッドでなく好きなエディタを使いたい。

Windows 版 S-PLUS では、標準のエディタは notepad(ノートパッド)に設定されています。関数 options を利用して、好きなエディタに変更することができます。(ただし、S-PLUS で扱えるのはプレーンテキストファイルのみで、リッチテキストや特定アプリケーション形式のファイルは扱えません。)

Example :
> options()$editor
[1] "notepad"
> options(editor="winword")
# エディタをMS-WORDに変更

大きなデータを扱ったところ、"Cannot allocate 8000000 bytes: options("object.size") is 5000000: see options help file"というエラーメッセージが出てきて終了した。

S-PLUS では特に扱えるデータの上限はありませんが、デフォルトでは上限値を定めています(通常約 5 MB)。関数 options を利用してこの上限値を変更することができます。

Example :
> options()$object.size
[1] 5e+006
> options(object.size=5e8)
# 上限値を500MBに変更
> options()$object.size
[1] 5e+008

関数やデータを異なるプラットホーム(UNIX->Windowsなど)に移したい。

異なるプラットホームに移すには、関数 dump を用いてデータをいったんテキスト形式の一時ファイルにセーブします。このファイルを、( FD やネットワークを用いて)別のプラットホーム上にコピーし、関数 source で再読み込みします。詳しくは dump や source のマニュアルをご覧ください。

Example :
> dump("mydata",file="my.dat")
# mydataという名前のSオブジェクトをファイル"my.dat"にセーブする。
> source("my.dat")
# ファイル"my.dat"からデータを読み込む

作業用データ領域(ディレクトリ)をデフォルトから変更したい。

ユーザ定義のオブジェクト(データや関数)は、通常関数 search() を実行したときに確認できるディレクトリパス群の一番最初にあるディレクトリに保存されます。

(オブジェクトの読み込みは全てのパスから行われますが、書き込みは1番目のディレクトリにのみ行われます。)

このディレクトリパスは関数 attach や detach を用いて変更することができます。(詳細は attach および detach のマニュアル、および「S言語1」「5.4 データディレクトリとフレーム」を参照)
ただし、1 番目のパスに attach されるディレクトリは、書き込み可能でなければなりません。

Example :
> attach("/usr/prj1",pos=1)
# 作業ディレクトリを"/usr/prj1"に変更
> detach(1)
# 元に戻す

コマンドウインドウ内での表示幅が短く、出力が折り返して大変見にくい。

コマンドウインドウでの width(表示幅)が適切に設定されていないと、出力が短く折り返されます。メインメニューの「オプション」->「セッション」を選択し、ダイアログボックスの width に適当な値を設定してください。(関数 options を用いても設定できます。)

操作中に"Error: Cannot read summary from summary filename"というエラーメッセージが出続ける。

S-PLUS の作業ディレクトリ(S-PLUS データベース1)には "_nonfi" という名前のファイルがあり、Windows 上でのファイル名と S-PLUS オブジェクト名を結びつける働きがあります。Windows のエクスプローラーでファイルをコピーしたり、Windows や S-PLUS の異常終了などにより、このファイルが消されたり整合性が取れなくなったりすると、上記のメッセージが出力されます。

Example :
> make.DB.summary(1)
と入力して、(データベース1の)サマリファイルを再作成してください。

S-PLUS の起動に相当時間がかかる。起動を早くしたい。

S-PLUS 起動時に「オブジェクトブラウザ」も起動する設定になっている場合で、たくさんの S オブジェクトが存在していると、起動に時間がかかります。以下の方法で解決してください。

  1. 長らく S-PLUS を利用していると、不要なオブジェクトが増加します。ユーザ作業用ディレクトリ(データベース pos1)から、不要なオブジェクトを削除してください。(再利用の可能性があるものは、バックアップを取ってください。)
  2. オブジェクトブラウザがアクティブな状態で、メインメニューの「書式 / ブラウズページ」を選択してください。Filtering のタブをクリックすると、オブジェクトブラウザに登録するデータベース(ディレクトリ)が選択できます。これを必要最小限のものにした上で、さらにオブジェクトブラウザ終了時に設定をセーブしてください。次のオブジェクトブラウザ起動時から、上記の設定が有効になります。
  3. (コマンドライン利用が中心になる方向け)メインメニューから「オプション / 設定」を選び、Startup のタブをクリックした後、オブジェクトブラウザの初期起動を off にしてください。これで、S-PLUS 起動時にオブジェクトブラウザが立ち上がらなくなります。

S-PLUS 起動時や終了時に行う作業を自動実行できるようにしたい。

.First という名前で関数を作成すると、S-PLUS の起動時に必ずこれを一回実行します。同様に .Last という名前で作成すると、終了時に実行します。毎回毎回設定するのが面倒な処理などは、この機能を利用すると便利です。(引数は指定しないでください)

Example :
> .First <- function() { attach("common") }
# 起動時に"common"というディレクトリをパスに入れて利用できるようにする。

以前動作していた関数が動かない。うっかり S-PLUS 関数と同じ名前のオブジェクトを作ってしまったようだが、名前の見当がつかない。

S-PLUS には標準で 1000 以上の関数を備えています。そのすべての名前を覚えておくことは不可能ですが、名前が「かち合う」ものを見つけるのに、関数 conflicts が役立ちます。

Example :

>lm(Fuel ‾ . , fuel.frame)
Error in call to model.matrix(): Argument number 2 in call not
    matched
Error in call to model.matrix(): Argument number 3 in call not
    matched
Dumped
# 線形回帰ができない。原因不明。先ほどまでは動作していたのに...。

>conflicts()
C:¥Program Files¥splus4¥stat¥_Functio184
"model.matrix"
C:¥Program Files¥splus4¥s¥_Dataset5
".Random.seed"
# 関数 model.matrix と同じ名前のオブジェクトを作っていた。内容確認の上、削除すると、

> rm(model.matrix)
> lm(Fuel ‾ . , fuel.frame)
Call:
lm(formula = Fuel ‾ ., data = fuel.frame)

Coefficients:
(Intercept) Weight Disp. Mileage Type1
7.6247 -0.000183342 0.002775231 -0.1333818 0.03229767
Type2 Type3 Type4 Type5
0.01882385 -0.003298749 -0.01575015 0.07845915

Degrees of freedom: 60 total; 51 residual
Residual standard error: 0.0979376
# 無事、動作するようになった。

作業ディレクトリ(...¥user¥...¥_Data)にデータなどが保存されているが、Windows のエクスプローラなどで不用のデータを削除しても良いか。

エクスプローラ、マイコンピュータ、DOS コマンドなどにより、外部から S-PLUS のオブジェクト(データ、関数)を削除することはしないでください。物理的には削除できますが、S-PLUS は独自にこれらのオブジェクトを管理するファイルを作成し、このファイルの中身と実際のディレクトリの内容とを照らし合わせて管理しています。ここで整合性がとれないと、エラーとなり、最悪の場合、一部のオブジェクトが利用できなくなる可能性がありますので、削除はいったん S-PLUS を起動してから

>rm(削除したいオブジェクト名)

としてください。

起動時の作業ディレクトリをデフォルトから変更したい。

Windows 版 S-PLUS では、デフォルトでは S-PLUS をインストールしたディレクトリの下の users というディレクトリの下に各ユーザ毎の作業ディレクトリを作成して、データの保存などを行います。

このディレクトリではなく、他のディレクトリを起動時から作業ディレクトリとして利用したいという場合は、環境変数 S_PROJ にディレクトリ名を設定してから S-PLUS を起動します。環境変数の設定の仕方は、下記の通りです。

Windows NTの場合

「スタート」->「設定」->「コントロールパネル」から「システム」を開き、「環境」のタブで設定する。

Windows 95、Windows98の場合

「スタート」から「ファイル名を指定して実行」を選び、sysedit を起動する。autoexec.bat のウィンドウで、S_PROJ=D:¥home¥splus のように記述する。

詳しくは、S-PLUS Programmer's Guide の "CHAPTER 15 COMMAND LINE OPTIONS"をご覧ください。

Example :
# コマンドでS-PLUSを起動の場合
"C:¥Program Files¥splus¥cmd¥splus.exe" S_PROJ="D:¥home¥splus"

historyコマンドで異常終了する。

UNIX 版 S-PLUS の history コマンドは、処理の中で awk を利用しています。正規の awk でなく、/usr/local/bin/awk などを利用している場合は、シンタックスが違うためにエラーになることがあります。

path の中で /usr/local/bin/awk などを利用している場合は、path の優先順位を変更して /usr/bin/awk が使われるように設定変更してください。どの awk を優先して利用しているかは、UNIX プロンプトから

% which awk

と入力すると表示されます。

上記の変更でもエラーが出る場合は、.Audit ファイルの不正の可能性があります。.Data の中の .Audit という名前のファイルをいったん( .Audit.back などに) rename をして、S-PLUS を再起動してください。

S-PLUS w2k のオブジェクト・エクスプローラには関数を表示させる機能がないようだが?

S-PLUS 4.5 のオブジェクト・ブラウザと S-PLUS 2000 のオブジェクト・エクスプローラは多少、デフォルトの規格が異なりますが、ブラウザとして、ファイルそのものではなく、データへのリンクを保存しているという点で同じものです。

オブジェクト・エクスプローラでユーザー定義の関数を表示させるには

  1. ツールバーのボタンクリックなどで、オブジェクト・エクスプローラをアクティブにする
  2. 左パネルの空白部分をクリック
  3. メニューバー 「挿入 / フォルダ」 を選択
  4. 挿入されたフォルダをクリックして、メニューバー「書式 / 選択されたFolder」
  5. ダイアログの「Data Objects」のうち、「Functions」をチェック

で OK です。

「Folder1」 などのデフォルトの名前を Rename すると分かりやすくなるでしょう。

レポート・ウィンドウの1行の長さが短い。変えるにはどうすればいいか。

1 行の長さは、オプションで設定されています。「コマンド・ウィンドウ(Commands、もしこのウィンドウがオープンしていなければ、ツールバーの コマンド・ウィンドウ ボタンをクリックしてください)」にて、プロンプト(">")に続けて、

>options()$width

とすると、おそらく、30以下の小さい値が出力されると思います。これがアウトプットのテキストの1行あたり文字数です。これを

> options(width=66)

ぐらいの大きさに設定してください。

この options による設定は、S-PLUS 終了時に無効になります。つまり、次の起動時にはまたレポート・ウィンドウの長さが短くなります。それを避けるためには、コマンド・ウィンドウにて、

>.First <- function(){
options(width=66)
}

という関数を作成してください(上の画面の .First 以降をコマンド・ウィンドウにカット&ペーストしてエンターを押してください)。

昨日まで動いていた S-PLUS が急に起動しなくなった。

ある日突然、S-PLUS が起動しなくなった、あせりますよね。仕事やレポートの締め切りは迫っているのに・・・。そこで、アンインストールと再インストールを試してみる、ところがこれもダメ、もうどツボ状態です。そんなときはこれをお試しください。

  1. デスクトップにS-PLUSのショートカットを作る

    1. デスクトップ上で右ボタンクリック、ショートカットメニューから「新規作成 / ショートカット」を選択
    2. 「参照」ボタンをクリック、「ショートカットの対象」として、S-PLUS のインストールフォルダの下にある、cmd フォルダを開き、そのフォルダの下にある、splus.exe という名前の S-PLUS 実行ファイルを選択、「次へ」をクリック
    3. ショートカットに適当な名前をつけて、「完了」をクリック

これで、デスクトップに、S-PLUS のショートカットができます。次に

  1. 書き込み権がある場所に、空のフォルダを作る

例えば、これを c:¥temp¥splus というフォルダとします。続いて

  1. デスクトップに作った、S-PLUSのショートカットを編集する

    1. ショートカットを右ボタンクリック、メニューから、「プロパティ」を選択
    2. 「リンク先」は "C:¥Program Files¥Insightful¥splus62¥cmd¥SPLUS.exe" となっていると思います。このフィールドの後ろに S_PROJ="c:¥temp¥splus" と入力、したがってここは "C:¥Program Files¥Insightful¥splus62¥cmd¥SPLUS.exe" S_PROJ=c:¥temp¥splus となります。この状態でOKをクリック

出来上がったショートカットをダブルクリックして、実行します。おそらく、これで問題なく S-PLUS が起動するはずです。でも、喜ぶのはちょっと待って。この間やっとの思いで作ったデータがないじゃないの!

S-PLUS のデータは標準で、"C:¥Program Files¥Insightful¥splus62¥users¥ユーザー名" の下のデータベースに保存されます。じゃ、そのデータベースを見るにはどうしたらいいの?

  1. ワーキングチャプターを変える

    1. メニューバー「ファイル / チャプター / 新規ワーキングチャプター」を選択
    2. 「Browse」ボタンをクリック、新しく出たダイアログで "C:¥Program Files¥Insightful¥splus62¥users¥ユーザー名" を選択
    3. OKをクリック

これで、見られるはずです。なお、立ち上がらない原因として最も多いのが、c, t など、S-PLUS の重要な関数と同じ名前のデータなどを作ってしまったことです。このことを確認するには、コマンド・ウィンドウから、プロンプト(>)に続けて、

> masked()

と入力、エンターします。すると、S-PLUS の関数などを(一見)上書きしている自分のデータなどの名前が表示されます。この中に、c や t がないか、確認してください(ピリオドで始まる名前のものは基本的に無害です)。もし、あれば、

> c.old <- c
> rm(c)

というコマンドで、c をc.old という名前で保存してから、削除します。再インストールでも動かないのは、アンインストールでは、データなどが削除されないためです。この処置をしておけば、次回はいつもの方法で起動できるはずです。

S-PLUS をバージョンアップした。インストール自体は正常に終了したようだが、起動すると、"do_op called!" というエラーメッセージが大量に現れる。

主に上級ユーザーや、他のアプリケーションから S-PLUS を呼び出すことがあるユーザーに起こりうる現象です。

原因はユーザー環境変数、あるいはシステム環境変数 SHOME, S_HOME を設定している場合です。確認には、S-PLUS を起動してから

> getenv("S_HOME")

あるいは

> getenv("SHOME")

としてください。これらの環境変数は、S-PLUS のホームディレクトリを明示的に指定するものです(ユーザーが自分で設定しないと、設定されません)。外部アプリケーションなどから、明示的に特定のバージョンの S-PLUS を起動させたい場合などに、設定されることがよくあります。

現れた文字列は、古いバージョンの S-PLUS のインストールディレクトリを表してはいませんか?

もしそうなら、

のいずれかで対応可能です。