通过读取行​​

时间:2019-02-23 19:13:08

标签: r

我很确定有人已经问过这个问题,但是我真的找不到。

我需要做一些分析,只想制作一个脚本,在其中我想通过readline输入表名或变量名,以便可以根据输入来调整函数。

my.table <- readline(prompt="Enter name of table: ")
my.variable1<- readline(prompt="Enter name of variable 1: ")
my.variable2<- readline(prompt="Enter name of variable 2: ")
surv_object <- Surv(time = my.table$my.variable1, event = my.table$my.variable2)

这实际上是行不通的。甚至view(my.table)都只返回NULL。

我应该在哪里查找此问题?我做错了什么?

谢谢您的帮助!

托马斯

2 个答案:

答案 0 :(得分:1)

大多数经验丰富的R程序员都怀疑使用eval(parse(text = ...))。如果目标是访问具有某些列名的现有R对象,那么这将是首选方法:

让我们假设您的用户知道mtcars在工作区中,并且它的变量名是:

您还需要一个函数来等待输入;否则readline只会得到一个空字符值,然后继续执行下一行代码。关于这一点,请参阅更早的答案:Make readline wait for input in R

 #Warning: this does not seem to work in RStudio because they assign stdin to /dev/null
my.table <- cat("Enter name of table: "); readLines("stdin", n=1); cat( "\n")
my.variable <- cat("Enter name of variable 1: "); readLines("stdin",n=1); cat( "\n")
my.variable2<- cat("Enter name of variable 2: "); readLines("stdin",n=1);cat( "\n")

my.obj <- get(my.table)

surv_object <- Surv(time = my.obj[my.variable1], event = my.obj[my.variable2])

如果我没有使用对象名称(作为字符值输入)来访问和分配给预先确定的名称,那么由于R名称(AKA { {1}}的名称实际上不是引号,因为它们不是字符类型而是“语言”类型。

在RStudio中,我某种程度上需要创建一个函数来进行输入。但是我还没有获得成功的测试版本。也许需要一个闪亮的界面?

答案 1 :(得分:0)

似乎您的主要问题是如何将文本转换为表达式。这是你想要的?这可能是超越最佳实践的一种方式。用户将需要知道表对象名称和变量名称。错误不会很明显。该代码将按照所告诉的那样简单地工作。

如果您使用的是RStudio,请签出?rstudioapi::showPrompt

从几张表开始:

table1 <- mtcars
table2 <- iris

按照提示进行操作。我输入的是“ table1”,“ wt”,“ hp”。

my.table <- readline(prompt="Enter name of table: ")
my.variable1<- readline(prompt="Enter name of variable 1: ")
my.variable2<- readline(prompt="Enter name of variable 2: ")

使用eval(parse(.)),将my.table字符串转换为data.frame()对象。

new.table <- eval(parse(text = my.table))

参考这两列。

new.table[, c(my.variable1, my.variable2)]