假设我有一个向量x
,我想用它的元素从矩阵或数据框中提取列M
。
如果x[1] = "A"
,我不能M$x[1]
用来提取带有标题名称的列A
,因为M$A
被识别而不被识别M$"A"
。我怎样才能删除引号,M$x[1]
而M$A
不是M$"A"
在这种情况下?
假设我有一个向量x
,我想用它的元素从矩阵或数据框中提取列M
。
如果x[1] = "A"
,我不能M$x[1]
用来提取带有标题名称的列A
,因为M$A
被识别而不被识别M$"A"
。我怎样才能删除引号,M$x[1]
而M$A
不是M$"A"
在这种情况下?
$
在这种情况下不要使用;改为使用[
。这是一个最小的示例(如果我了解您要做什么)。
mydf <- data.frame(A = 1:2, B = 3:4)
mydf
# A B
# 1 1 3
# 2 2 4
x <- c("A", "B")
x
# [1] "A" "B"
mydf[, x[1]] ## As a vector
# [1] 1 2
mydf[, x[1], drop = FALSE] ## As a single column `data.frame`
# A
# 1 1
# 2 2
我想你会在R Inferno中找到你的答案。从第 8 圈开始:“相信它按预期进行”,“字符串不是名称”子部分之一......您还可以The main difference is that $ does not allow computed indices, whereas [[ does.
在帮助页面的行中找到一些解释?Extract
。
请注意,采用这种方法是因为使用从矩阵或数据框中提取列的方法指定的问题,在这种情况下[row, column]
,提取模式实际上是无论如何都要走的路(并且该$
方法不适用于 a matrix
)。