2012-02-28 13 views
3

パーティのmob機能で使用する式を一緒に貼り付けようとしています。つまり、数式はy〜x1 + ... + xM |の形式になります。 z1 + ..zNである。R:update.formulaの文字数を512文字に制限

私はy〜x1 + ... + xMのいくつかの予備的な適合をしており、次にupdate()を使用して方程式の条件付き部分を追加したいと思います。私はWindowsとLinux(64ビット)でこれを実行しているし、すべての78項(および何より78項)を使用した場合の両方が失敗し

var1 <- 1:78 
x1 <- paste("x", var1, sep="") 
f1 <- paste("f", var1[1:10], sep="")         

# use first 77 variables 
fmla <- as.formula(paste("y ~ ", paste(x1[1:77], collapse=" + ", sep=""), sep="")) 
fmla2 <- update(fmla, paste(". ~ . | ", paste(f1, collapse= " + "), sep="")) 

# CHANGE x to all 78 variables 
fmla <- as.formula(paste("y ~ ", paste(x1, collapse=" + ", sep=""), sep="")) 
fmla2 <- update(fmla, paste(". ~ . | ", paste(f1, collapse= " + "), sep="")) 

はここでテストコードです。エラーメッセージには、解析エラー(テキスト= x)::1:514:予期しない ')'が含まれています。

x変数の名前の長さを変更すると、より少ない変数でupdate()が中断されますが、常に512文字を超えるエラーが発生します。

これには回避策がありますか?

ありがとうございました。

+0

ようこそ。サンプルコードと明確な質問を表示するため+1。 – Andrie

答えて

4

これは文字列の長さの問題のように思われるので、プラスの周りの空白のような重要でない文字を削除するのは簡単です(collapse= "+")。

これは動作します:

fmla2 <- update(fmla, paste(". ~ . | ", paste(f1, collapse= "+"), sep="")) 

fmla2 
y ~ (x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + 
    x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 + 
    x22 + x23 + x24 + x25 + x26 + x27 + x28 + x29 + x30 + x31 + 
    x32 + x33 + x34 + x35 + x36 + x37 + x38 + x39 + x40 + x41 + 
    x42 + x43 + x44 + x45 + x46 + x47 + x48 + x49 + x50 + x51 + 
    x52 + x53 + x54 + x55 + x56 + x57 + x58 + x59 + x60 + x61 + 
    x62 + x63 + x64 + x65 + x66 + x67 + x68 + x69 + x70 + x71 + 
    x72 + x73 + x74 + x75 + x76 + x77 | f1 + f2 + f3 + f4 + f5 + 
    f6 + f7 + f8 + f9 + f10) 
0

これが回避策です。

var1 <- 1:78 
x1 <- paste("x", var1, sep="") 
f1 <- paste("f", var1[1:10], sep="") 
as.formula(paste("y~",paste(x1,collapse="+"),"|",paste(f1,collapse="+"))) 
1

これらの返信をありがとうございますが、それらはすべて式にupdate()を使用する重要な部分を欠場しています。

最初の数式が数式の条件付き部分を貼り付ける前に更新されているため、更新を使用する必要があります。

as.character()には〜500文字の制限があるため、式にas.character()を使用することはできません。この問題を回避する1つの方法は、確定した最初の式に対してdeparse()を使用することです。

fmla.string <- gsub(" ","",paste(deparse(fmla), collapse=""), fixed=T) 
fmla2 <- as.formula(paste(fmla.string, paste(f1, collapse= " + "), sep=" | ")) 

Duncan Murdochとr-helpに感謝します。

関連する問題