x$ed:$运算符中的R错误对于原子向量无效

x$ed:$运算符中的R错误对于原子向量无效,r,R,这是我的密码: x<-c(1,2) x names(x)<- c("bob","ed") x$ed x从关于$的帮助文件(请参见?“$”)中,您可以阅读: $仅对递归对象有效,并且仅在下面有关递归对象的部分中讨论 现在,让我们检查x是否是递归的 > is.recursive(x) [1] FALSE 递归对象具有类似列表的结构。向量不是递归的,而是一个原子对象,让我们检查一下 > is.atomic(x) [1] TRUE 因此,将$应用于向量(非递归对象)时会出现

这是我的密码:

x<-c(1,2)
x
names(x)<- c("bob","ed")
x$ed

x从关于
$
的帮助文件(请参见
?“$”
)中,您可以阅读:

$仅对递归对象有效,并且仅在下面有关递归对象的部分中讨论

现在,让我们检查
x
是否是递归的

> is.recursive(x)
[1] FALSE
递归对象具有类似列表的结构。向量不是递归的,而是一个原子对象,让我们检查一下

> is.atomic(x)
[1] TRUE
因此,将
$
应用于向量(非递归对象)时会出现错误,请改用
[

> x["ed"]
ed 
 2 
您还可以使用
getElement

> getElement(x, "ed")
[1] 2

因为
$
对原子向量不起作用。请改用
[
[[
。从
$
的帮助文件中:

对于原子向量、矩阵/数组和递归(类似列表,请参见is.recursive)对象,默认方法的工作方式有所不同。$仅对递归对象有效,并且仅在下面关于递归对象的部分中讨论


x[[“ed”]
将起作用。

出现此错误的原因是您有一个
向量

如果您想使用
$
运算符,只需将其转换为
data.frame
。但是,由于在这种特殊情况下只有一行,您还需要将其转置;否则
bob
ed
将成为您的行名,而不是我认为您需要的列名

x <- c(1, 2)
x
names(x) <- c("bob", "ed")
x <- as.data.frame(t(x))
x$ed
[1] 2

x可以通过
$

递归集合不是。而是使用
[[]]

 Browse[1]> is.atomic(list())
 [1] FALSE

 Browse[1]> is.atomic(data.frame())
 [1] FALSE

 Browse[1]> is.atomic(class(list(foo="bar")))
 [1] TRUE

 Browse[1]> is.atomic(c(" lang "))
 [1] TRUE
R有时会很有趣

 a = list(1,2,3)
 b = data.frame(a)
 d = rbind("?",c(b))
 e = exp(1)
 f = list(d)
 print(data.frame(c(list(f,e))))

   X1 X2 X3 X2.71828182845905
 1  ?  ?  ?          2.718282
 2  1  2  3          2.718282

尽管一切正常,但由于R环境中当前加载的某个包引起的冲突,仍会出现此错误

因此,要解决此问题,请从R环境中分离所有不需要的包

detach(package:neuralnet)
底线:分离所有不再需要执行的库…问题就会解决。

这里x是一个向量。 您需要将其转换为数据帧以使用$operator

 x <- as.data.frame(x) 

x这个解决方案对我有效

data我想你是反其道而行之。列表是递归对象,可以通过$访问,数字向量是原子的,无法访问。我不确定你想在这里显示什么。对于1个项目,使用
x yes会更容易。列表会更好。我从不使用列表,所以我总是忘记它们。我遇到了相同的错误
 对象$y:$运算符中的错误对原子向量无效
我已尝试通过您的答案/建议解决问题,但尚未解决问题。可能我不理解您最初的回答。请尝试使用其他更完整的示例重新表述您的答案,好吗?谢谢it@oaxacamatt我的答案与data.frames或列表是递归对象,您使用的是向量,这就是为什么我的答案对您没有帮助。如果您错了,而我的答案是正确的,那么您的下一票无效。
x<-c(1,2)
names(x)<- c("bob","ed")
x <- as.data.frame(x)
x<-c(1,2)
x
names(x)<- c("bob","ed")
x$ed
x <- as.data.frame(t(x))