R 如何将用户输入读入subset命令

R 如何将用户输入读入subset命令,r,dataframe,R,Dataframe,我有一些像这样的命令 subset( (aggregate(cbind(var1,var2)~Ei+Mi+hours,a, FUN=mean)), (aggregate(cbind(var1,var2)~Ei+Mi+hours,a, FUN=mean))$Ei == c(1:EXP) ) 我想做什么 1要求用户输入var1和var2 2将这些变量放入上面所示的subset命令行,然后 继续做其他事情 注意:对于读取用户输入,我有如下变量 cax,bx,cx,dx,ex,fx,gx,hx

我有一些像这样的命令

subset(
  (aggregate(cbind(var1,var2)~Ei+Mi+hours,a, FUN=mean)),
  (aggregate(cbind(var1,var2)~Ei+Mi+hours,a, FUN=mean))$Ei == c(1:EXP)
)
我想做什么

1要求用户输入var1和var2

2将这些变量放入上面所示的subset命令行,然后 继续做其他事情

注意:对于读取用户输入,我有如下变量 cax,bx,cx,dx,ex,fx,gx,hx,ix,jx,kx,lx,mx,nx,ox=c1:15和每个 变量映射到数字1到15。因此,为用户和用户显示此信息 要求用户选择1到15之间的任意数字,然后 检查相应变量的输入编号和 我认为,将其读入命令行是最好的方法

那么我如何实现这一点呢

关于答案: 只是想知道有一种可能的情况,比如,如果用户想要一次性输入多个数字。[ex:1,2,3]…而不是如何使用下面的答案中所述的readlines来阅读

v1 <- quote(var1 <- as.numeric(readline('Enter Variable 1: ')))
eavl(v1)
xx <- paste0(letters[1:15], 'x')
xx[v1]

在这种情况下如何读取多个变量?

下面是readline交互式提示的一个粗略示例。计算v1时,将提示用户输入值。然后将该值存储为var1

所以在你的情况下,它可能会像

> v1 <- quote(var1 <- as.numeric(readline('Enter a number from 1 to 15: ')))
> eval(v1)
Enter a number from 1 to 15: 7
> var1
## [1] 7
> xx <- paste0(letters[1:15], 'x')
> xx
## [1] "ax" "bx" "cx" "dx" "ex" "fx" "gx" "hx" "ix" "jx" "kx" "lx" "mx" "nx" "ox"
> xx[var1]
## [1] "gx"
我借用了一个函数的概念。您可以以不可见的方式返回输出,它仍将接受用户值

input.fun <- function(){
     v1 <- readline("var1: ")  
     v2 <- readline("var2: ")
     v3 <- readline("var3: ")
     v4 <- readline("var4: ")
     v5 <- readline("var5: ")
     out <- sapply(c(v1, v2, v3, v4, v5), as.numeric, USE.NAMES = FALSE)
     invisible(out)    
}

> x <- input.fun()
var1: 7
var2: 4
var3: 8
var4: 5
var5: 2
> x
[1] 7 4 8 5 2
回应您的编辑:我不确定这是否是在一行中读取多个数字的标准方法,但它是有效的

> xx <- readline('Enter numbers separated by a space: ')
Enter numbers separated by a space: 4 12 67 9 2
> as.numeric(strsplit(xx, ' ')[[1]])
## [1]  4 12 67  9  2

这里有一个使用扫描的可能性

它不是超级健壮的,但是如果你在暂停之前复制前半部分,它会要求你输入两个变量,然后如果你运行后半部分,它会使用这两个值。我已经调整了聚合和子集,使其更适合变量使用,这意味着不使用公式语法


我没有做任何错误检查。这是提问者的一个练习。

为什么不让用户填写一个配置文件CSV或其他设置所有参数的文件?哦,这是一个简单的方法,而不是要求用户提供选项然后处理它。实际上我有5个不同的选项告诉用户选择任何一个,这样我就可以跳转到特定的功能并执行操作所有这5种类型只是不同类型的绘图,需要不同类型的用户输入,所以基本上,我将把csv的值存储在一个数据框中,并相应地读取它们,然后执行操作,这就是你的意思,是吗?例如,是的。您还应该使用带有默认值参数的函数。谢谢,这很简单……我没有预料到…………我想向用户询问5个选项,然后根据用户选择的选项转移流量。那么我可以知道R中是否有一种开关函数来实现这一点吗?或者你建议的简单方法?再次感谢你的帮助。是的。戴上了。谢谢。哈哈,我只是在看那个。我添加了一些您可能会觉得有用的内容。@statisticalbeginner我对您的edit@RichardScriven这绝对是我想要的谢谢..:
> xx <- readline('Enter numbers separated by a space: ')
Enter numbers separated by a space: 4 12 67 9 2
> as.numeric(strsplit(xx, ' ')[[1]])
## [1]  4 12 67  9  2
#sample data
df<-data.frame(
    ax=runif(50),
    bx=runif(50),
    cx=runif(50),
    dx=runif(50),
    Ei=sample(letters[1:5], 50, replace=T)
)

#get vars
vars<-c(NA,NA)
while(any(is.na(vars))) {
    cat(paste("enter var number", sum(!is.na(vars))+1),"\n")
    cat(paste(seq_along(names(df)), ":", names(df)), sep="\n")
    try(n<-scan(what=integer(), nmax=1), silent=T)
    vars[min(which(is.na(vars)))]<-n
}
#--pause

#use vars
subset(aggregate(df[,vars], df[,c("Ei"), drop=F], FUN=mean), Ei=="a")