如何处理 r 错误:$ 运算符对于原子向量无效
在 R 中您可能遇到的一个常见错误是:
$ operator is invalid for atomic vectors
当您尝试使用$运算符访问原子向量的元素时,会发生此错误。
“原子向量”是使用 R 中的c()或vector()函数创建的任何一维数据对象。
不幸的是, $不能用于访问原子向量的元素。相反,您应该使用双括号[[]]或getElement()函数。
本教程分享了如何在实践中处理此错误的示例。
如何重现错误消息
假设我们尝试使用$运算符来访问 R 中以下向量的元素:
#definevector
x <- c(1, 3, 7, 6, 2)
#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')
#display vector
x
a B C D E
1 3 7 6 2
#attempt to access value in 'e'
x$e
Error in x$e: $ operator is invalid for atomic vectors
我们收到错误,因为使用$运算符访问原子向量的元素是无效的。我们还可以检查我们的向量确实是原子的:
#check if vector is atomic
is. atomic (x)
[1] TRUE
方法#1:使用双括号访问元素
通过向量中的名称访问元素的一种方法是使用[[]]表示法:
#definevector
x <- c(1, 3, 7, 6, 2)
#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')
#access value for 'e'
x[['e']]
[1] 2
方法#2:使用 getElement() 访问元素
按名称访问向量中元素的另一种方法是使用getElement()表示法:
#definevector
x <- c(1, 3, 7, 6, 2)
#provide names
names(x) <- c('a', 'b', 'c', 'd', 'e')
#access value for 'e'
getElement(x, 'e')
[1] 2
方法#3:将向量转换为数据框并使用 $operator
按向量中的名称访问元素的另一种方法是首先将向量转换为数据框,然后使用$运算符来访问值:
#definevector x <- c(1, 3, 7, 6, 2) #provide names names(x) <- c('a', 'b', 'c', 'd', 'e') #convert vector to data frame data_x <- as. data . frame (t(x)) #display data frame data_x a B C D E 1 1 3 7 6 2 #access value for 'e' data_x$e [1] 2
其他资源
以下教程解释了如何解决 R 中的其他常见错误:
如何在 R 中修复:名称与以前的名称不匹配
如何在 R 中修复:强制引入的 NA
如何在 R 中修复:提示越界
如何在 R 中修复:对比只能应用于具有 2 个或更多级别的因子