在 R 中应用需要 seq() 的函数
Apply a function that requires seq() in R
我正在尝试 运行 对数据帧的每一行求和。假设我想求 100n^2,从 n=1 到 n=4.
> df <- data.frame(n = seq(1:4),a = rep(100))
> df
n a
1 1 100
2 2 100
3 3 100
4 4 100
更简单的例子:
让我们将 fun1
作为示例求和函数。我可以取出 100,因为我可以稍后乘以它。
fun <- function(x) {
i <- seq(1,x,1)
sum(i^2) }
然后我想将此函数应用于数据框的每一行,其中 df$n
提供总和的上限。
期望的结果如下,在 df$b
:
> df
n a b
1 1 100 1
2 2 100 5
3 3 100 14
4 4 100 30
为了获得这些结果,我尝试了应用函数
apply(df$n,1,phi)
并且还用df转换成矩阵
mat <- as.matrix(df)
apply(mat[1,],1,phi)
两者都return一个错误:
Error in seq.default(1, x, 1) : 'to' must be of length 1
我理解这个错误,因为我理解为什么 seq
需要长度为 1 的 'to' 值。我不知道如何前进。
我在将数据帧作为矩阵读取时也尝试过同样的方法。
可能不太简单的例子:
在我的例子中,我只需要将上面的结果 df$b
乘以 100(或 df$a
)就可以得到每一行的最终答案。但在其他情况下,第二个值可能更根深蒂固,例如 a^i。我将如何调用两个变量 a 和 n?
基础问题:
我的基本目标是对数据框(或矩阵)的每一行应用求和。上面的问题源于我尝试使用 seq() 这样做,正如我在本网站的答案中看到的那样。我很乐意接受以不同的方式避免上述问题的答案 运行 求和。
如果我们应用 seq
,它不需要 from
和 to
的向量。所以我们可以循环执行
df$b <- sapply(df$n, fun)
df$b
#[1] 1 5 14 30
或者我们可以Vectorize
Vectorize(fun)(df$n)
#[1] 1 5 14 30
我正在尝试 运行 对数据帧的每一行求和。假设我想求 100n^2,从 n=1 到 n=4.
> df <- data.frame(n = seq(1:4),a = rep(100))
> df
n a
1 1 100
2 2 100
3 3 100
4 4 100
更简单的例子:
让我们将 fun1
作为示例求和函数。我可以取出 100,因为我可以稍后乘以它。
fun <- function(x) {
i <- seq(1,x,1)
sum(i^2) }
然后我想将此函数应用于数据框的每一行,其中 df$n
提供总和的上限。
期望的结果如下,在 df$b
:
> df
n a b
1 1 100 1
2 2 100 5
3 3 100 14
4 4 100 30
为了获得这些结果,我尝试了应用函数
apply(df$n,1,phi)
并且还用df转换成矩阵
mat <- as.matrix(df)
apply(mat[1,],1,phi)
两者都return一个错误:
Error in seq.default(1, x, 1) : 'to' must be of length 1
我理解这个错误,因为我理解为什么 seq
需要长度为 1 的 'to' 值。我不知道如何前进。
我在将数据帧作为矩阵读取时也尝试过同样的方法。
可能不太简单的例子:
在我的例子中,我只需要将上面的结果 df$b
乘以 100(或 df$a
)就可以得到每一行的最终答案。但在其他情况下,第二个值可能更根深蒂固,例如 a^i。我将如何调用两个变量 a 和 n?
基础问题:
我的基本目标是对数据框(或矩阵)的每一行应用求和。上面的问题源于我尝试使用 seq() 这样做,正如我在本网站的答案中看到的那样。我很乐意接受以不同的方式避免上述问题的答案 运行 求和。
如果我们应用 seq
,它不需要 from
和 to
的向量。所以我们可以循环执行
df$b <- sapply(df$n, fun)
df$b
#[1] 1 5 14 30
或者我们可以Vectorize
Vectorize(fun)(df$n)
#[1] 1 5 14 30