2016-09-10 76 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() 

我米麪臨如下錯誤:

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

我曾嘗試重新配製,以及:

情節< -function() 爲(Ⅰc)中 { survfit(更新(監測網(S,T) - 。,重新配製(ⅰ)),數據= 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結合了公式的各個部分。如果您想了解更多詳情,請參閱這些功能的幫助頁面。

這裏的和完整的工作版本與樣品INOUT

#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") 

代碼

library(survival) 
library(survminer) 

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

當我複製/粘貼到R I沒有得到任何錯誤。你必須做一些與你發佈的示例代碼不同的東西。

+0

謝謝但代碼存在以下錯誤:錯誤重新配置(i):對象'我'沒有找到 – riz

+0

你的例子有'for(i in c)'。你沒有保留那部分?當你的例子中沒有出現「SEX」錯誤時,你是如何得到一個錯誤的? – MrFlick

+0

是的,我保留了條件)。我嘗試了數據集的完整版本。所以,那個錯誤消息 – riz

相關問題