2016-09-10 40 views
-3

私は関数を使ってRで簡単なタスクを自動化しようとしています。 Cは、文字変数のリストです。 mydata - はデータセットです。関数の入力として文字列のリストを渡す

基本的には、ベクトルの各文字列に、関数への入力としてCを与える必要があります。

セット:

mydata <- structure(list(a = c(1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L), b = c(4L,3L, 1L, 2L, 1L, 5L, 2L, 2L), c = c(1L, 1L, 1L, 1L, 1L, 1L, 1L,1L), d = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), t = c(42L, 34L, 74L,39L, 47L, 8L, 36L, 39L), s = c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L)), .Names = c("a", "b", "c", "d", "t", "s"), row.names = c(NA,8L), class = "data.frame") 

コード:

c<-c("a","b","c","d") 

plot<-function() 
for (i in c) 
{ 
    fit<-survfit(Surv(s,t)~paste(i), dat=mydata) 
    ggsurvplot(fit, pval = TRUE) 
} 
plot() 

Iは、次のエラー対向M:私は同様に定式を試みた

Error in model.frame.default(formula = Surv(mydata$s, mydata$t) ~ paste(i), : variable lengths differ (found for 'paste(i)')

プロットを用-function() (I c)において {survfit(更新(Surv(S、T)〜。、再公式(I))、データ= MYDATA) ggsurvplot(フィット、PVAL = TRUE)
} プロット()

が、このコードは、このエラーを与える:

Error in reformulate(i) : object 'i' not found 

このコードを動作させるために、任意の助けを?

ありがとうございます。

+1

サンプル入力データで何らかの[再現可能な例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を提供すると、助けが簡単になります実際にコードを実行してテストすることができます。コメントのために – MrFlick

+0

感謝します。サンプル入力データが提供されました – riz

答えて

1

建物式は動的に難しい場合があります。あなたが数式で$を使用しないでくださいではなく、

fit(Surv(mydata$s,mydata$t)~paste(i), dat=mydata) 

使用

fit(update(Surv(s,t)~., reformulate(i)), data=mydata) 

。ここではreformualte()は文字列から数式を作成するのに役立ち、updateは数式の一部を組み合わせます。詳細については、これらの機能のヘルプページを参照してください。私はコピー/ Rに、私はすべてのエラーを取得しないことを貼り付けると

はここ

#sample input 
mydata <- structure(list(a = c(1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L), b = c(4L,3L, 1L, 2L, 1L, 5L, 2L, 2L), c = c(1L, 1L, 1L, 1L, 1L, 1L, 1L,1L), d = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), t = c(42L, 34L, 74L,39L, 47L, 8L, 36L, 39L), s = c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L)), .Names = c("a", "b", "c", "d", "t", "s"), row.names = c(NA,8L), class = "data.frame") 
c<-c("a","b","c","d") 

inoutのサンプルで完全に動作するバージョンとコード

library(survival) 
library(survminer) 

plot <- function() { 
    for (i in c) { 
     fit <- survfit(update(Surv(t,s)~., reformulate(i)), data=mydata) 
     ggsurvplot(fit) 
    } 
} 
plot() 

です。あなたが投稿したサンプルコードとは異なる何かをしているに違いありません。

+0

ありがとうございますが、コードに次のエラーがあります:改訂のエラー(i):オブジェクト 'i'が見つかりません – riz

+0

あなたのサンプルに 'for(i in c)'があります。あなたはその部分を守っていませんでしたか?あなたの例にどこにもないときにSEXに関するエラーをどうやって得ましたか? – MrFlick

+0

はい、私は条件のためにそれを保ちました)。私は完全なバージョンのデータセットを試しました。だから、そのエラーメッセージ – riz

関連する問題