R语言 把一个函数递归应用到一个列表中 – rapply()函数
R语言中的 rapply() 函数用于将一个函数递归应用于一个列表。
语法:
rapply(object, f, classes = “ANY”, deflt = NULL, how = c(“unlist”, “replace”, “list”)
参数
object: 代表列表或表达式
f: 代表要递归应用的函数
classes: 代表向量的类名或 “ANY “来匹配任何类
deflt: 代表当how不是 “替换 “时的默认结果
how: 代表模式
rapply() 函数中的模式有两种基本类型。如果 how = “replace ” ,列表对象的每个元素如果本身不是一个列表,并且有一个包含在类中的类,那么列表的每个元素都被应用于该元素的函数 f 的结果值所替换。
如果 how = “list ” 或者 how = “unlist “, list 对象被复制,所有被包含在类中的非列表元素被应用于该元素的函数 f 的结果值替换,所有其他元素被 deflt 替换 。
例1:使用替换模式
# Defining a list
ls <- list(a = 1:5, b = 100:110, c = c('a', 'b', 'c'))
# Print whole list
cat("Whole List: \n")
print(ls)
# Using replace mode
cat("Using replace mode:\n")
rapply(ls, mean, how = "replace", classes = "integer")
输出
Whole List:
a
[1] 1 2 3 4 5b
[1] 100 101 102 103 104 105 106 107 108 109 110
c
[1] "a" "b" "c"
Using replace mode:a
[1] 3
b
[1] 105c
[1] "a" "b" "c"
例2:使用列表模式
# Defining a list
ls <- list(a = 1:5, b = 100:110, c = c('a', 'b', 'c'))
# Print whole list
cat("Whole List: \n")
print(ls)
# Using list mode
cat("Using list mode:\n")
rapply(ls, mean, how = "list", classes = "integer")
输出
Whole List:
a
[1] 1 2 3 4 5b
[1] 100 101 102 103 104 105 106 107 108 109 110
c
[1] "a" "b" "c"
Using list mode:a
[1] 3
b
[1] 105c
NULL
例子3:使用unlist模式
# Defining a list
ls <- list(a = 1:5, b = 100:110, c = c('a', 'b', 'c'))
# Print whole list
cat("Whole List: \n")
print(ls)
# Using unlist mode
cat("Using unlist mode:\n")
rapply(ls, mean, how = "unlist", classes = "integer")
输出
Whole List:
a
[1] 1 2 3 4 5b
[1] 100 101 102 103 104 105 106 107 108 109 110
$c
[1] "a" "b" "c"
Using unlist mode:
a b
3 105