plot()调用认为data.frame是原子向量

问题描述 投票:0回答:1

我有一个data.frame,irv,有一个感兴趣的列。 class(irv)返回'data.frame'。

is.recursive(irv)返回TRUEis.atomic(irv)返回FALSE。在控制台中,irv$x返回感兴趣的列。 max(irv$x)也返回适当的最大值。

在一个情节调用中,我试图使用此列的最大值来设置xlim,所以我有

plot(y~x,data = subsetirv,xlab = '', ylab = '', ylim = c(0,20), 
     xlim = c(0, max(irv$x)),
     cex = 0.5, pch = 19) 

这些都是我所拥有的所有论据,以防有一些奇怪的论证互动

但每次它抛出以下错误:

Error in irv$x : $ operator is invalid for atomic vectors

当其他一切声称它是一个数据框时,为什么plot()调用会认为irv是原子的?

通常我会尝试提供可重复的数据,但除了我的实际数据之外我无法重现问题,而且我不确定如何以合理的方式共享真实数据。

我有没有想到的一些奇怪的互动?

顺便说一下,正在绘制的数据是irv的一个子集,如果这很重要的话。

-edit-我刚试过的东西是将数据帧保存为不同的对象名称。它最初被称为irv,我保存到一个名为testdf的新对象中。这解决了这个问题。在情节或最大功能环境中有什么东西?这个名字显然是一个问题,但我不知道为什么。

-edit2-在建议之后,这里是dput(head(irv))pastebin输出的pastebin,这里是str(irv)的输出:

'data.frame':   16198 obs. of  17 variables:
 $ reader     : chr  "MG" "MG" "MG" "MG" ...
 $ read       : int  1 1 1 1 1 1 1 1 1 1 ...
 $ age        : num  2 3 4 5 6 7 8 9 10 11 ...
 $ fishid     : Factor w/ 2118 levels "2010_TNS_0135",..: 7 7 7 7 7 7 7 7 7 7 ...
 $ otorad     : num  6.15 9.52 13.47 17.32 22.28 ...
 $ year       : chr  "2010" "2010" "2010" "2010" ...
 $ readid     : chr  "2010_TNS_0153_MG_1" "2010_TNS_0153_MG_1" "2010_TNS_0153_MG_1" "2010_TNS_0153_MG_1" ...
 $ incwidth   : num  3.94 3.37 3.94 3.85 4.96 ...
 $ profflag   : chr  "good" "good" "good" "good" ...
 $ median     : num  3.85 3.82 3.78 3.77 3.78 ...
 $ upper75prob: num  4.44 4.19 3.94 3.94 4.03 ...
 $ lower25prob: num  3.58 3.65 3.67 3.5 3.56 ...
 $ IQR        : num  0.859 0.543 0.269 0.437 0.465 ...
 $ diff_flag  : num  0.0954 -0.8162 0.6171 0.1933 2.5376 ...
 $ roll_flag  : chr  "good" "good" "good" "good" ...
 $ irv        : num  3.936 -0.563 0.571 -0.09 1.104 ...
 $ irvf       : chr  "good" "good" "good" "good" ...
r plot
1个回答
2
投票

问题不在于您有一个名为irv的data.frame,而是在一个名为irv的data.frame中有一个名为irv的列。

plot()中使用公式语法时,将在data=参数中传递的data.frame的上下文中计算所有参数。你的xlim = c(0, max(irv$x))参数是基本运行的

xlim = with(irv, c(0, max(irv$x)))

所以它找到名为“irv”的列,并且该列是原子的,因此不知道如何处理$运算符。

为避免混淆,请在函数外部预先计算该值(并确保没有与您使用的变量名称共享的列

maxx <- max(irv$x)
plot(y~x,data = subsetirv,xlab = '', ylab = '', ylim = c(0,20), 
     xlim = c(0, maxx),
     cex = 0.5, pch = 19) 
© www.soinside.com 2019 - 2024. All rights reserved.