创建一个函数,通过在 r 中获取索引值作为向量来查找列表中的值
create a function find the value in lists through getting the index value as vector in 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]
和 return 值 8,然后是 df 的第二行,即 (2, 1, 2),因此将其用作 array_main
的索引以获得 array_main[2, 1, 2]
和 return 值 200,最后是第三行,即 (3,3,1),因此将其用作 array_main
的索引以获得 array_main[3,3,1]
和 return 值 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 的新手,需要你的帮助。
我有数组形式的数据,我想创建一个应用于数据框的函数,从每行中获取 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]
和 return 值 8,然后是 df 的第二行,即 (2, 1, 2),因此将其用作 array_main
的索引以获得 array_main[2, 1, 2]
和 return 值 200,最后是第三行,即 (3,3,1),因此将其用作 array_main
的索引以获得 array_main[3,3,1]
和 return 值 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