Error in x * w : non-numeric argument to binary operator
时间: 2023-07-26 13:04:03 浏览: 86
这个错误通常是因为数据中存在缺失值或非数值数据导致的。你可以尝试使用 `na.omit()` 函数将数据中的缺失值删除或使用 `as.numeric()` 函数将非数值数据转换成数值类型,以避免这个错误的发生。以下是修改后的代码示例:
```R
# 导入数据
data <- read.csv("data.csv", header = TRUE)
# 提取光谱数据并删除缺失值
spectra <- na.omit(data[-1])
# 将光谱数据转换成数值类型
spectra <- as.matrix(spectra)
spectra <- apply(spectra, 2, as.numeric)
# 定义分数阶微分函数
fracdiff <- function(data, d) {
n <- nrow(data)
k <- 1:n
w <- (1:(n - 1))^(-d/2)
w <- c(1, w)
x <- c(0, cumsum(data))
y <- x * w
z <- diff(y)
res <- z[-1] / w[-1]
return(res)
}
# 进行分数阶微分
d_values <- c(1/5, 2/5, 3/5, 4/5, 1, 6/5, 7/5, 8/5, 9/5, 2)
fracdiff_res <- data.frame(wavelength = data$wavelength)
for (d in d_values) {
fracdiff_res <- cbind(fracdiff_res, fracdiff(spectra, d))
}
# 进行二阶微分
second_diff <- apply(spectra, 2, diff, differences = 2)
second_diff <- rbind(rep(NA, ncol(spectra)), second_diff)
second_diff <- rbind(rep(NA, ncol(spectra)), second_diff)
second_diff_res <- data.frame(wavelength = data$wavelength, second_diff)
# 输出结果
write.csv(fracdiff_res, "fracdiff.csv", row.names = FALSE)
write.csv(second_diff_res, "second_diff.csv", row.names = FALSE)
```
在这个修改后的代码中,我们使用 `na.omit()` 函数删除了数据中的缺失值,并使用 `as.numeric()` 函数将光谱数据转换成数值类型。这样,我们就可以避免出现 `non-numeric argument` 的错误。
阅读全文