R:无法对与 trapz 函数(pracma 包)一起使用的向量进行子集化

问题描述 投票:0回答:1

如果这是一个非常基本的问题,或者如果我问得不对,我深表歉意。这是我第一次在这里提问,我是一个自学成才的 R 用户,所以我的理解存在一些很大的差距。

所以我使用

library(pracma)
来获取以下数据框的梯形积分:

df <- data.frame(
x=c(1,2,3),
y1=c(3,4,5),
y2=c(1,2,1))

我想取 y1 和 y2 的梯形积分,每个积分都相对于 x。我的想法是,我只需使用 trapz 作为我的函数来执行一个非常简单的 sapply:

sapply(2:ncol(df), function(y) trapz(df[1], df[y]))

但这会产生错误“参数‘x’和‘y’必须是实向量或复向量。”

具体来说,当我使用

trapz(df[1], df[2])
时,我会遇到同样的错误,但当我尝试
trapz(df$x, df$y1)
时,效果很好。 据我所知,这些是完全相同的命令,所以我不明白为什么只有第一个命令给我一个错误。

有什么办法可以解决这个问题吗? 或者,有什么方法可以在不同的列上使用 sapply 而无需按列索引进行子集化?

r vector subset integral
1个回答
0
投票

在对

[[
列中的值进行索引时,应使用
[
而不是
df

> sapply(2:ncol(df), function(y) trapz(df[[1]], df[[y]]))
[1] 8 3
© www.soinside.com 2019 - 2024. All rights reserved.