'double'类型的数据的子范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了'double'类型的数据的子范围相关的知识,希望对你有一定的参考价值。

问题已在注释中解决!

我有一个9个元素(Spec_opt)的列表(称为“ S3 Spectra”)。这些元素中的两个(“ data”和“ freq”)的数据类型为'double'(请参见所附的屏幕转储)。

呼叫Spec_opt$freq[1:5]看起来像这样:

> Spec_opt$freq[1:5]
[1] 19.65228 19.65205 19.65183 19.65160 19.65137

我需要对这些值的范围进行子集化,并且我已经尝试过:

Spec_opt$freq <- Spec_opt$freq %>% filter(Spec_opt$freq %in% (-0.5:9.5))

但是出现此错误:

Error in UseMethod("filter_") : 
  no applicable method for 'filter_' applied to an object of class "c('double', 'numeric')"

此:

Spec_opt$freq <- Spec_opt$freq[which(Spec_opt$freq >= -.5 | Spec_opt$freq <= 9.5)]

不做任何事情。

从其他帖子中我了解到这是数据类型('double')的问题。

执行此操作:Spec_opt$freq <- lapply(Spec_opt$freq, as.numeric)

Spec_opt$freq转换为列表,其中每个元素仍为'double'类型]

现在调用Spec_opt $ freq [1:5]看起来像这样:

Spec_opt$freq[1:10]
[[1]]
[1] 19.65228

[[2]]
[1] 19.65205

[[3]]
[1] 19.65183

[[4]]
[1] 19.6516

[[5]]
[1] 19.65137

有人可以帮助我,将'double'转换为“普通” values还是帮助我以这种格式对数据进行子集化?

[对不起,我不知道如何提供数据,如果我调用dput(Spec_opt$freq[1:50])提供一个子集(总共n = 130,000个值),它只是给出一个数字列表,其中问题没有得到解决一直在说...

> dput(Spec_opt$freq[1:5])
c(19.6522802209025, 19.6520531555891, 19.6518260902757, 19.6515990249622, 
19.6513719596488)

整个Spec_opt对象很大,并且dput(Spec_opt)无法在我的“窗口”中打印。让我知道是否可以使这个示例更好?

enter image description here

问题已在注释中解决!我有9个元素(S3光谱)的列表(称为“ Spec_opt”)。其中两个元素(“ data”和“ freq”)的数据类型为“ double”(请参见随附的屏幕转储)。 ...

答案

编辑:

另一答案

处理某些错误的一种方法是将列表转换为数据框,然后应用过滤器:

以上是关于'double'类型的数据的子范围的主要内容,如果未能解决你的问题,请参考以下文章

matlab中怎样将uint8转化成double型

打破异常'_InternalLinkedHashMap '不是'Map'类型的子类型 “

输入'列表 '不是'List类型的子类型 “

ctypes结构体里面有double成员,结构体传给c dll以后,double类型成员的值就变了

matlab boundaries和fchcode函数无法执行的解决办法 未定义与 'double' 类型的输入参数相对应的函数 'boundaries'

C#Vector3D运算符' - '不能应用t类型'Vector3D'和double