r - 创建一个函数,通过将索引值作为 r 中的向量来查找列表中的值

标签 r arrays function apply sapply

我对 R 还很陌生,需要你的帮助。

我有数组形式的数据,我想创建一个应用于数据帧的函数,从每行获取 3 个值,并将它们用作索引以从列表中获取值。

该函数应采用三个值来标识数组中的值

select_value <- function(A, B, C) {
  result <-array_main[A, B, C]
  return (result)
}

数组是

vector1 <- c(10, 20, 30, 40, 50, 60, 70, 80, 90)
vector2 <- c(100, 200, 300, 400, 500, 600, 700, 800, 900)
vector3 <- c(2, 4, 6, 8, 10, 12, 14, 16, 18)
array_main <- array(c(vector1, vector2, vector3), dim = c(3, 3, 3))


df <- data.frame (C1 = c(1, 2, 3), C2 = c(2, 1, 3), C3 = c(3, 2, 1))

因此该函数应该以 df 的第一行为例[行值为 (1,2,3)] 并将其用作 array_main 的索引以获得 array_main[1,2,3]并返回值 8,然后是 df 的第二行,即 (2, 1, 2),因此将其用作 array_main 的索引获取array_main[2, 1, 2]并返回值 200,最后,第三行即 (3,3,1),因此将其用作 array_main 的索引获取array_main[3,3,1]并返回值 90 。

如何获取 ( result ) 变量中存储的值作为向量?

非常感谢您的帮助

最佳答案

您根本不需要 select_value 函数。您可以像这样完成整个事情:

array_main[as.matrix(df)]
#> [1]   8 200  90

学习要点

还有一些需要注意的地方是您的函数 select_value 比它需要的长度要长。写作:

select_value <- function(A, B, C) {
  result <-array_main[A, B, C]
  return (result)
}

与书写相同

select_value <- function(A, B, C) {
  array_main[A, B, C]
}

要注意的第二点是,编写一个依赖于函数外部的数据而不是作为参数传入的函数并不是一个好主意。编写此类函数的更好方法是:

select_value <- function(data, A, B, C) {
  data[A, B, C]
}

但是,当我们这样做时,我们意识到 select_value 本质上与方括号本身是相同的函数。上面的函数几乎与定义 select_value 相同:

select_value <- `[`

也许更有用的是像这样定义你的函数:

select_values <- function(data_array, index_df) {
  data_array[as.matrix(index_df)]
}

在您的情况下,会产生:

select_values(array_main, df)
#> [1]   8 200  90

关于r - 创建一个函数,通过将索引值作为 r 中的向量来查找列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71553640/

相关文章:

r - 多元回归模型过滤估计的点须图

r - 为什么我需要将 `get` 包装在 J `lapply` 调用中的虚拟函数中?

R 深网包 : how to add more hidden layers to my neural network?

python - Matplotlib:一张图像上的两个数据集

c - 向左移动缓冲区,在 LED 面板上滚动字符串?

jquery - 如何使用 JQuery 更新另一个元素的内容

r - 在函数内将参数传递给 R 中的 lm

arrays - 使用 `ls --ignore` 的数组

function - Emacs:钩子(Hook)如何工作?

javascript - 需要帮助更改变量值以更改显示的消息