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



我还是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(,则将其用作CCD_ 5的索引以获得CCD_。

如何将存储在(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

最新更新