英文:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论