R 将字符串列表作为输入传递给函数

R 将字符串列表作为输入传递给函数,r,function,R,Function,我正在尝试使用一个函数自动化R中的一个简单任务。 C是字符变量列表mydata-是数据集 基本上,我需要将vectorC中的每个字符串作为函数的输入 数据集: 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, 0

我正在尝试使用一个函数自动化R中的一个简单任务。
C
是字符变量列表
mydata
-是数据集

基本上,我需要将vector
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") 
有什么帮助使这个代码工作吗


谢谢

动态构建公式可能很棘手。而不是

fit(Surv(mydata$s,mydata$t)~paste(i), dat=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")
#示例输入

mydata当您提供某种类型的示例输入数据时,会更容易提供帮助,这样我们就可以实际运行和测试代码。谢谢您的评论。提供了示例输入数据,谢谢,但代码存在以下错误:重新格式化时出错(i):未找到对象“i”。您的示例具有(c中的i)的
。你没有保留那部分吗?当你的例子中没有关于性的错误时,你是如何得到一个关于性的错误的?是的,我也保留了这个条件)。我尝试使用数据集的完整版本。所以,那个错误信息我再次测试了我的答案,它成功了。我已经包含了上面的完整代码块。您应该能够将其复制/粘贴到新的R会话中,并验证其是否有效。
fit(Surv(mydata$s,mydata$t)~paste(i), dat=mydata)
fit(update(Surv(s,t)~., reformulate(i)), data=mydata)
#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()