我有一个data.frame irv
,其中有一个感兴趣的列。 class(irv)
返回“ data.frame”。
is.recursive(irv)
返回TRUE
,is.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是原子的?
通常,我会尝试提供可复制的数据,但是除了实际数据外,我无法重现该问题,而且我不确定如何以合理的方式共享实际数据。
我没有想到一些奇怪的互动吗?
btw,如果重要的话,正在绘制的数据是irv的子集。
-edit-我刚刚尝试过的操作是将数据框另存为其他对象名称。它最初称为irv
,我保存到一个名为testdf
的新对象中。这解决了问题。 irv在绘图或最大功能环境中是否存在?名称显然是个问题,但我不知道为什么。
-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" ...
答案 0 :(得分: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)