【发布时间】:2023-04-08 03:23:01
【问题描述】:
我正在尝试创建一个循环,该循环将对我所有感兴趣的变量应用平滑函数。我使用的数据集是 R 中的 aemet 数据集,重点是温度。为了在第 10 列上应用平滑,我运行了以下代码,效果很好。
library(fda)
library(fda.usc)
data(aemet,package = "fda.usc")
tt = aemet$temp$argvals
temp = as.data.frame(aemet$temp$data,row.names=F)
range.tt = aemet$temp$rangeval
inv.temp = data.frame(t(aemet$temp$data)) # 365 x 73 matrix
names(inv.temp) = aemet$df$name # Oviedo is the 10th column of inv.temp
ovibasis5 = create.fourier.basis(rangeval = range(tt),nbasis = 5)
ovifourier5.fd = smooth.basis(argvals = tt, y = inv.temp[,i],fdParobj = ovibasis5)$fd
ovi5 = eval.fd(tt,ovifourier5.fd)
ovi5
接下来,我想对数据集中的所有 73 列进行平滑处理,所以我使用如下循环函数
for(i in 1: inv.temp){
ovibasis5 = create.fourier.basis(rangeval = range(tt),nbasis = 5)
ovifourier5.fd = smooth.basis(argvals = tt, y = inv.temp[,i],fdParobj = ovibasis5)$fd
ovi5[,i] = eval.fd(tt,ovifourier5.fd)
}
ovi5
但后来我收到此错误消息 “1:inv.temp 中的错误:NA/NaN 参数 另外:警告信息: 在 1:inv.temp 中:数值表达式有 73 个元素:只使用第一个 > > ovi5"
我做错了什么?
【问题讨论】:
-
你可以试试
seq_len(ncol(inv.temp))而不是1:inv.temp。 -
嗨。如果您可以分享,那就太好了:stackoverflow.com/help/minimal-reproducible-example 除此之外,您的
inv-temp是一个具有列和行的数据框,而 for 循环需要一个单维向量,即该数据框的列数。 -
@MartinGal ...或者更简洁一点,
seq_along(inv.temp)。 -
@r2evans 当然你是对的。我根本记不起这个顺序是沿列还是沿行...也许现在我可以...
-
@MartinGal 我得到同样的错误信息
标签: r dataframe data-science