之前我已经处理过R的相关算法,但是我不确定当前代码正在发生什么。
我的输入数据是两个.csv文件。第一列只有一列,我将其强制为data.frame。看起来像这样(我的数据是相当长的时间序列,所以我只显示前10个数据点):
trends
V1 0.2701541
V2 2.00532
V3 1.79548
V4 0.2549123
V5 0.2124736
V6 -1.132594
V7 -0.711875
V8 -1.577067
V9 -0.5320426
V10 1.325005
我的其他文件有几列,如下所示:
X13_EVI X14_EVI X15_EVI X18_EVI
1 1.0492437 0.54155557 -0.58480284 -3.47111922
2 1.7274555 1.46141010 0.79416226 1.04050086
3 1.7274555 1.46141010 0.48772557 1.17721662
4 -0.1941446 -0.14833532 -0.12514781 0.22020630
5 -0.1941446 -0.14833532 -0.12514781 0.22020630
6 -0.5332505 -0.60826258 -0.73802119 -0.73680402
7 -0.4202152 -0.49328077 -0.12514781 -0.32665674
8 -0.9853917 -1.29815348 -1.04445787 -0.73680402
9 -0.3071799 -0.03335350 0.18128888 -0.46337250
10 0.5971025 1.00148284 1.10059895 0.63035358
当我尝试去做
corr=cor(trends, all.obs)
我收到错误消息
Error in cor(trends, all.obs) : 'x' must be numeric
我不记得以前曾遇到过这个问题,也无法弄清楚是什么原因引起的。过去,我始终能够计算每个观察到的时间序列(all.obs中的列)与趋势(在本例中为1个趋势)之间的相关性。我检查了
> is.numeric(trends)
[1] FALSE
> is.numeric(all.obs)
[1] FALSE
> is.data.frame(all.obs)
[1] TRUE
> is.data.frame(trends)
[1] TRUE
我也做了
> typeof(all.obs)
[1] "list"
> typeof(trends)
[1] "list"
因为我得到了
> trends=as.numeric(trends)
Error: (list) object cannot be coerced to type 'double'
自从我从事此工作已经有一段时间了,所以也许我遗漏了一些非常明显的东西?
尝试查看trends
和的所有列all.obs
是否都存储为数字。
为此,请运行sapply(trends, is.numeric)
和sapply(all.obs, is.numeric)
。如果您FALSE
在输出中看到任何内容,则应在as.numeric()
函数的帮助下将其强制为数字,从而对其进行修复。
或者,一种避免此类问题的更好方法是在读取csv文件时指定列的类型。您可以通过使用colClasses
来自read.csv
函数的参数来完成此操作。例子:
trends <- read.csv("PATH_TO_DATA_FOLDER/trends.csv", colClasses = "numeric")
all.obs <- read.csv("PATH_TO_DATA_FOLDER/all_obs.csv", colClasses = rep("numeric", 4))
看看是否足够。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句