美好的一天,我正在寻求一些帮助来处理我的数据集。我有 14000 行和 500 列,我试图获得不同列组中各个行的一阶导数的最大值。我将数据保存为数据框,第一列是变量的名称。我的数据如下所示:
Species Spec400 Spec405 Spec410 Spec415
1 AfricanOilPalm_1_Lf_1 0.2400900 0.2318345 0.2329633 0.2432734
2 AfricanOilPalm_1_Lf_10 0.1783162 0.1808581 0.1844433 0.1960315
3 AfricanOilPalm_1_Lf_11 0.1699646 0.1722618 0.1615062 0.1766804
4 AfricanOilPalm_1_Lf_12 0.1685733 0.1743336 0.1669799 0.1818896
5 AfricanOilPalm_1_Lf_13 0.1747400 0.1772355 0.1735916 0.1800227
例如,对于物种列中的每个变量,我想获得从 Spec495 到 Spec500 的最大导数。这是我在遇到错误之前所做的。
x<-c(495,500,505,510,515,520,525,530,535,540,545,550)##get x values of reflectance(Spec495 to Spec500)
y.data.f<-hsp[,21:32]##get row values for the required columns
y<-as.numeric(y.data.f[1,])##convert to a vector, for just the first row of data
library(pspline) ##Using a spline so a derivative maybe calculated from a list of numeric values
我真的很想避免使用循环,因为它需要时间,但这是迄今为止我所知道的唯一方法
for(j in 1:14900)
+ { y<-as.numeric(y.data.f[j,]) + a1d<-max(predict(sm.spline(x, y), x, 1))
+ write.table(a1d, file = "a1-d-appended.csv", sep = ",",
+ col.names = FALSE, append=TRUE) + }
这个循环一直运行到第 7861 个值,然后得到这个错误:
Error in smooth.Pspline(x = ux, y = tmp[, 1], w = tmp[, 2], method = method, :
NA/NaN/Inf in foreign function call (arg 6)
我确信必须有一种方法可以避免使用循环,也许使用 plyr 包,但我不知道如何做到这一点,也不知道哪个包最适合获得最大导数的值。
任何人都可以提供一些见解或建议吗?提前致谢