如何为apply()函数格式化我的函数以计算特定列?

huangapple go评论75阅读模式
英文:

How may I format my function for apply() to calculate specific columns?

问题

初学者使用 R 函数,感谢。我有一个大型数据集,想要基于两个不同的列计算值。我相信我应该使用 `apply()` 并编写一个函数,但我不确定如何成功地将所有这些元素结合起来。

我想要计算一个变量 x 的平方根,除以 x 加上另一个变量 y 的平方根:`sqrt( as.numeric(x) ) / ( y + sqrt( as.numeric(x) ))`。我的数据框 `env.metadata` 包含这些变量值作为列,其中 x 是 `env.metadata$gl_a`,y 是 `env.metadata$dist`,我想要计算每一行的这个值。以下是示例 `env.metadata` 的 Dput()。

这是我遇到困难的地方:我想要使用 `apply(env.metadata, MARGIN = 1, my.fun)`,其中 `my.fun` 是上述方程。有人可以帮忙提供这个链接吗?

编辑:笔误

    > dput(env.metadata)
    structure(list(gl_a = c(244, 437, 130, 339), dist = c(45, 31, 
    77, 104), other_cols = c(2, 3, 4, 5), another_col = c(6, 7, 8, 
    9)), class = "data.frame", row.names = c(NA, -4L))
英文:

Beginner with R functions, TIA. I have a large dataset where I'd like to calculate values based on two different columns. I believe I should use apply() and write a function, but I'm unsure how to combine all these elements successfully.

I'm looking to calculate the sqrt() of one variable, x, divided by the sqrt() of x plus a different variable, y: sqrt( as.numeric(x) ) / ( y + sqrt( as.numeric(x) )). My data frame env.metadata contains these variable values as columns where x is env.metadata$gl_a and y is env.metadata$dist and I'd like this computed value for each row. Dput() of example env.metadata below.

This is where I'm struggling: I want to use apply(env.metadata, MARGIN = 1, my.fun) where my.fun is the above equation. Could someone please help with this link?

Edit: typo

> dput(env.metadata)
structure(list(gl_a = c(244, 437, 130, 339), dist = c(45, 31, 
77, 104), other_cols = c(2, 3, 4, 5), another_col = c(6, 7, 8, 
9)), class = "data.frame", row.names = c(NA, -4L))

答案1

得分: 3

这是一个矢量化计算,因此您不需要使用apply -

sqrt( env.metadata$gl_a ) / ( env.metadata$dist + sqrt(env.metadata$gl_a ))
#[1] 0.2576769 0.4027498 0.1289766 0.1504098
英文:

This is a vectorised calculation so you don't need apply -

sqrt( env.metadata$gl_a ) / ( env.metadata$dist + sqrt(env.metadata$gl_a ))
#[1] 0.2576769 0.4027498 0.1289766 0.1504098

答案2

得分: 0

另外,使用 `purrr::map2` 我们可以得到相同的输出

``` r
library(purrr)

unlist(map2(df$gl_a, df$dist, \(x,y) sqrt(x) / (y + sqrt(x))))

<sup>创建于2023年07月03日,使用 reprex v2.0.2</sup>

[1] 0.2576769 0.4027498 0.1289766 0.1504098
英文:

Alternatively with purrr::map2 we can get the same output

library(purrr)

unlist(map2(df$gl_a,df$dist, \(x,y) sqrt(x) / (y + sqrt(x))))

<sup>Created on 2023-07-03 with reprex v2.0.2</sup>

[1] 0.2576769 0.4027498 0.1289766 0.1504098

huangapple
  • 本文由 发表于 2023年7月3日 20:45:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/76604879.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定