“子集”和“$ 运算符对原子向量无效”

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 目的,我建议使用“

【讨论】:

以上是关于“子集”和“$ 运算符对原子向量无效”的主要内容,如果未能解决你的问题,请参考以下文章

预测$class 中的错误:$ 运算符对原子向量无效

caret::predict 给出错误:$ 运算符对原子向量无效

Python-RPy - “x$terms 中的错误:$ 运算符对原子向量无效”

如何将总和添加到表中并获取 R 中每个单元格的比例

算法题每日一练---第52天:位运算求解子集

集合的子集输出(位运算方式)