“子集”和“$ 运算符对原子向量无效”
Posted
技术标签:
【中文标题】“子集”和“$ 运算符对原子向量无效”【英文标题】:"Subset" and "$ operator is invalid for atomic vectors" 【发布时间】:2016-02-22 11:30:06 【问题描述】:花 3 小时试图了解我的文件发生了什么
错误的方式:子集上的子集
DataA=subset(Data,Data$var1=="1")
DataA$newvar=Results$cluster
DataB=subset(DataA,Data$newvar=="7")
好方法:每个对象一个子集
DataA_var1=subset(Data,Data$var1=="1")
DataA_var1$newvar=Results$cluster
DataB=subset(DataA_var1,Data$newvar=="7")
我在$ operator is invalid for atomic vectors
上阅读了很多内容
在我的情况下,这个错误也与“不正确的维度数”有关(我尝试了技巧as.data.frame()
)
我重新安装了上一个 RStudio 版本。
我的意思是:如果您有 $ operator is invalid for atomic vectors
错误,这不是 typeof()
问题的必要条件......
试试看你是否在同一个对象上使用了两次subset()
。
【问题讨论】:
在subset
中,您不需要Data$
。当您在 matrix
对象上使用它时,您将收到 $ operator ...
消息。请查看str(Data)
我真的不明白你的问题是什么。这两个块(好的和坏的)在我看来是一样的,除了一个对象的名称。正如@akrun 提到的,您对subset
的使用是有缺陷的。你想达到什么目的?请分享一些数据和预期的输出,以便您获得一些有用的帮助。
请提供一个最小的、完整的和可重现的示例,任何其他人都可以简单地复制并粘贴到他们的 R 会话中运行。需要包括所有库语句和输入。如果数据很大并且您的输入是x
,则将您的数据减少到说明问题所需的最小值,然后通过在您的问题中显示dput(x)
的输出来显示它。有关一般建议,请参阅minimal reproducible example,有关如何在 SO 上提出问题的更多面向 R 的建议,请参阅 How to Make a Great R Reproducible Example。
@akrun 是的,你是对的,一般来说,当尝试在矩阵上使用 $ 时会收到此消息......但我所说的所有对象都是 'data.frame'跨度>
【参考方案1】:
你可以试试这样的:
DataA <- subset(Data, var1 == "1")
DataA$newvar <- Results$cluster
DataB <- subset(DataA, newvar == "7")
第一行应读作“DataA 获得Data
的子集,其中var1
等于1。”
仅出于语法目的,对于 R 目的,我建议使用“
【讨论】:
以上是关于“子集”和“$ 运算符对原子向量无效”的主要内容,如果未能解决你的问题,请参考以下文章
caret::predict 给出错误:$ 运算符对原子向量无效