Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
data.frame中的数字列返回“;num";带str()但不带is.numeric()_R - Fatal编程技术网

data.frame中的数字列返回“;num";带str()但不带is.numeric()

data.frame中的数字列返回“;num";带str()但不带is.numeric(),r,R,我有一个data.frame,d1,有7列,第5列到第7列应该是数字: str(d1[5]) 'data.frame': 871 obs. of 1 variable: $ Latest.Assets..Mns.: num 14008 1483 11524 1081 2742 ... is.numeric(d1[5]) [1] FALSE as.numeric(d1[5]) Error: (list) object cannot be coerced to type 'doubl

我有一个data.frame,d1,有7列,第5列到第7列应该是数字:

str(d1[5])
'data.frame':   871 obs. of  1 variable:
 $ Latest.Assets..Mns.: num  14008 1483 11524 1081 2742 ... 

is.numeric(d1[5])
[1] FALSE

as.numeric(d1[5])
Error: (list) object cannot be coerced to type 'double'
这怎么可能?如果str将其标识为数字,它怎么可能不是数字?我正在从CSV导入

它可能是一个列表(基于错误消息)。您是否尝试过
类(d1[5])
?如果它是一个列表,那么您希望
d1[[5]]
d1[5][[1]]]
是数字

编辑:

考虑到d1[5]本身就是一个数据帧,您需要将其视为一个数据帧。像这样的方法应该会奏效:

is.numeric(d1[5][,1])
为什么?
d1
是一个列表,因此
d1[5]
是一个长度为1的列表,在本例中包含一个
data.frame
。要获取数据帧,请使用
d1[[5]]

即使数据帧包含数字数据,它本身也不是数字:

> x = data.frame(1:5,6:10)
> is.numeric(x)
[1] FALSE
数据框中的各个列要么是数字,要么不是数字。例如:

> z <- data.frame(1:5,letters[1:5])

> is.numeric(z[[1]])
[1] TRUE
> is.numeric(z[[2]])
[1] FALSE
您可以用一个方便的函数来概括这一切:

> is.numeric_data.frame=function(x)all(sapply(x,is.numeric))

> is.numeric_data.frame(d1[[5]])
[1] TRUE 

d1[5]不是单个值。它是一个向量(可能是一个列表?)。如果你得到一个值,我打赌它是数值。例如:

is.numeric(d1[5][[1]])
as.numeric(d1[5][[1]])
所以我认为混淆的是列对象和列中的元素。R区分了这两种思想,而其他语言,如SQL,在功能上假设在讨论专栏时,您通常指的是专栏的元素


R语言定义文档中的内容确实帮助我了解了如何引用R中的项。

class(d1[5])返回[1]“data.frame”。额外的一组方括号对d1[[5]]有什么作用?如果d1实际上是一个列表,那么额外的一组括号会有所帮助。但基本上您需要从数据中提取值。frame的data.frame…1eb,为了更好地理解[]和[]之间的区别,请查看R Lang Def的索引部分:d1是一个列表。查看我提取值的答案。列表成员是一个数据框,从来不是数字。亚历克斯:你在说什么?类别(列表(x=1)[[1]])=“数字”
> is.numeric_data.frame=function(x)all(sapply(x,is.numeric))

> is.numeric_data.frame(d1[[5]])
[1] TRUE 
is.numeric(d1[5][[1]])
as.numeric(d1[5][[1]])