如何将动态列名添加到子集?

时间:2015-12-10 08:17:11

标签: r

这是闪亮的应用程序的一部分,这些值来自被动ui /服务器,我缩小了我在server.R中的问题,我为了简单而使用这个简单的R,它应该正确地反映我的问题我希望,如何使用< @><<<<<<工作???我也试过,没有引用,eval一无所获。

t <- data.frame(Titanic)
inputparam = "Class"
inputvalue = "2nd"
c(inputparam, "=",inputvalue)
noquote(inputparam)

head(subset(t, Class ==inputvalue))   ## works OK
head(subset(t, inputparam ==inputvalue))   ## <@>><   doesn't work !!!!!
#temp <- quote(inputparam)
#head(subset(t,  eval(temp) == inputvalue)) 

2 个答案:

答案 0 :(得分:1)

使用双方括号,使用单个方括号的子集,按变量 value 获取数据框列。这是R 101:

head(t[ t[[inputparam]] ==inputvalue, ])

所以$ -signs按名称获取列,如果您事先知道名称,这是很好的,也是首选。双方括号评估括号中的内容并按值获取。你可以在那里粘贴任何R表达式。

答案 1 :(得分:1)

带解析的

eval

eval(parse( text=paste0("subset(t, ", inputparam, "=='", inputvalue, "')") ))

inputvalue必须与其他引用括起来,以便parse将其识别为character

或者你应该尝试这样的事情,(检查评论是否有原因)

t[ t[colnames(t)==inputparam]==inputvalue, ]