raw
是data.table
,以下代码有效:
raw[,r_responseTime] #Returns the whole column
raw[,c_filesetSize] #Same as above, returns column
plot(raw[,r_responseTime]~raw[,c_filesetSize]) #draws something
现在我想从字符串中指定这些列,例如:
col1="r_reponseTime"
col2="c_filesetSize"
我现在如何通过字符串引用列来实现与上面相同的内容?
raw[,col1] #Returns the whole column
raw[,col2] #Same as above, returns column
plot(raw[,col1]~raw[,col2]) #draws something
当然不起作用,因为我需要某种“解除歧视”。我不知道在帮助和互联网上搜索什么,很抱歉这个愚蠢的问题。
答案 0 :(得分:32)
如果您提供了可重现的示例,或者至少显示了raw
的列名称以及r_responseTime
和c_filesetSize
包含的内容,那将会很好。这就是说,get
是你解除引用的功能所以试试这些:
raw[, get(col1)]
raw[, get(col2)]
plot(raw[, get(col1)] ~ raw[, get(col2)])
答案 1 :(得分:7)
另一种方法是使用match()
函数或%in%
运算符。
raw[, match(col1, names(raw)),with=FALSE]
答案 2 :(得分:4)
如果您有字符串向量,则可以使用mget
cols = c("r_reponseTime", "c_filesetSize")
raw[, mget(cols)]
答案 3 :(得分:0)
不幸的是,“获取”可能会引起问题! 请参见下面的示例:
m = 100
x1 = sample(c("cat", "dog", "horse"), m, replace=TRUE)
y1 = rnorm(m)
fill1 = sample(c("me", "myself", "dude"), m, replace=TRUE)
df = data.frame("x"=x1, "y"=y1, "fill"=fill1)
dt = data.table(df)
获取不起作用!
y = "y"
dt[ , get(y)]
获取作品!
yCol = "y"
dt[ , get(yCol)]
总是可以工作,但是不漂亮!
eval(parse(text = paste0("values = dt[ ,", y, "]")))
eval(parse(text = paste0("values = dt[ ,", yCol, "]")))