如何处理 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 个或更多级别的因子

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注