如何从R中的用户输入读取一个向量并将其用于进一步处理[R]

时间:2014-05-31 20:49:48

标签: r

我想要求用户输入整数值列表。 用户可以输入单个值或一堆多个值,如1 2 3(spcae或逗号分隔) 然后使用输入的数据进行进一步计算。

我正在使用以下代码

EXP <- as.integer(readline("enter the experiment numbers (You can include multiple number of experiments with space seperate) \n"))

这里有或没有整数,无论​​我在EXP中存储什么值,我都无法在进一步的编程中使用它们。如下所示

gg2 <- subset((aggregate(cbind(var)~En+Mn+hours,a, FUN=mean)),(aggregate(cbind(var)~En+Mn+hours,a, FUN=mean))$En == c(EXP))

上述命令因条件$ En == c(EXP)而失败,因为通过readline输入的值不起作用。

我该怎么办?

2)上述问题与整数有关。 在字符作为输入的情况下,相同的解决方案不起作用。就像下面一样

 prompt1 <- "enter the variable_name \n"
     var <- as.character((readline(prompt1))[[1]])

如果我输入Ph作为提示,那么var将存储为&#34; Ph&#34;,这个值我不能在命令行中使用

gg2 <- subset((aggregate(cbind(var)~En+Mn+hours,a, FUN=mean)),(aggregate(cbind(var)~En+Mn+hours,a, FUN=mean))$En == c(EXP))

它会抛出错误,例如,可变长度不同(找到&#39; En&#39;) 但如果我用像Ph这样的实际值替换var,那么它将正常工作。

数据集已在此处上传... Dataset     a&lt; - 数据集导入

Consider names(a) = c("Ei","Mi","hours","Nphy","Cphy","CHLphy","Nhet","Chet","Ndet","Cdet","DON","DOC","DIN","DIC","AT","dCCHO","TEPC","Ncocco","Ccocco","CHLcocco","PICcocco","par","Temp","Sal","co2atm","u10","dicfl","co2ppm","co2mol","pH")

我这样做

v1 <- quote(var1 <- as.numeric(readline('Enter a number from 1 to 15: ')))
eval(v1)
v2 <- quote(var2 <- as.numeric(readline('Enter a number from 1 to 15: ')))
eval(v2)


variable1 <- as.name(names(a[var1]))
variable2 <- as.name(names(a[var2]))
gg4 <- subset((aggregate(cbind(variable1,variable2)~Ei+Mi+hours,a, FUN=mean)))

读取用户输入,然后在命令中使用用户输入来聚合所需数据。上面的命令使用变量1和变量2,因此它不起作用,并且它的抛出错误。 如果我用像Nphy,Cphy这样的实际列名替换variable1和variable2,那么一切都运行良好。

like this gg4 <- subset((aggregate(cbind(Nphy,Cphy)~Ei+Mi+hours,a, FUN=mean)))

所以我想知道如何让用户输入在命令行中工作?

2 个答案:

答案 0 :(得分:3)

第一部分应该是:

prompt <- "enter the experiment numbers (space-separated list) \n"
EXP <- as.integer(strsplit(readline(prompt), " ")[[1]])

第二部分更加模糊(你能解释一下你的数据是什么样的以及你想做什么吗?)但也许你正在寻找这样的东西:

sub.a <- subset(a, En %in% EXP)
aggregate(var~En+Mn+hours, sub.a, FUN=mean)

我没有看到ggplot2的链接。如果没有,请删除任何提及。

答案 1 :(得分:0)

您可以尝试scan()。这是一个示例:

> x <- scan()
1: 4

2: 6

3: 10

4: 11

5:

Read 4 items 

> x
[1] 4 6 10 11