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))