我无法弄清楚为什么adply()
会返回包含原始变量的data.frame
,而apply()
则不会。基本上,看起来adply()
只是另一个mutate()
。我错过了什么?
测试数据:
library(pacman)
p_load(plyr)
g_loadings = c(.50, .60, .80,
.60, .70, .60,
.80, .50, .30)
group_1_loadings = c(.50, .50, .50,
0, 0, 0,
0, 0, 0)
group_2_loadings = c(0, 0, 0,
.50, .50, .50,
0, 0, 0)
group_3_loadings = c(0, 0, 0,
0, 0, 0,
.50, .50, .50)
d = data.frame(g_loadings,
group_1_loadings,
group_2_loadings,
group_3_loadings)
adply()
:
adply(d, 1, function(x) {
var_g_group = sum(x^2)
var_remain = 1 - var_g_group
loading_specificity = sqrt(var_remain)
return(loading_specificity)
}
)
返回:
g_loadings group_1_loadings group_2_loadings group_3_loadings V1
1 0.5 0.5 0.0 0.0 0.7071068
2 0.6 0.5 0.0 0.0 0.6244998
3 0.8 0.5 0.0 0.0 0.3316625
4 0.6 0.0 0.5 0.0 0.6244998
5 0.7 0.0 0.5 0.0 0.5099020
6 0.6 0.0 0.5 0.0 0.6244998
7 0.8 0.0 0.0 0.5 0.3316625
8 0.5 0.0 0.0 0.5 0.7071068
9 0.3 0.0 0.0 0.5 0.8124038
apply()
:
apply(d, 1, function(x) {
var_g_group = sum(x^2)
var_remain = 1 - var_g_group
loading_specificity = sqrt(var_remain)
return(loading_specificity)
}
)
返回:
[1] 0.7071068 0.6244998 0.3316625 0.6244998 0.5099020 0.6244998 0.3316625 0.7071068 0.8124038
为什么adply()
不会与apply()
返回相同的内容?
答案 0 :(得分:3)
这些plyr
函数的命名约定是第一个字母对应于它操作的数据结构,第二个字母对应于它返回的数据结构。因此,adply
对数组进行操作并返回data.frame
。您可以使用.expand
选项指定要返回的列。
adply(d, 1, function(x) {
var_g_group = sum(x^2)
var_remain = 1 - var_g_group
loading_specificity = sqrt(var_remain)
return(loading_specificity)
}, .expand=F)
# X1 V1
# 1 1 0.7071068
# 2 2 0.6244998
# 3 3 0.3316625
# 4 4 0.6244998
# 5 5 0.5099020
# 6 6 0.6244998
# 7 7 0.3316625
# 8 8 0.7071068
# 9 9 0.8124038
或者使用aaply
取回一个数组(这与apply
返回的数组相同,除了apply
在结果上使用as.vector
aaply(d, 1, function(x) {
var_g_group = sum(x^2)
var_remain = 1 - var_g_group
loading_specificity = sqrt(var_remain)
return(loading_specificity)
}, .expand=F)
# 1 2 3 4 5 6 7 8
# 0.7071068 0.6244998 0.3316625 0.6244998 0.5099020 0.6244998 0.3316625 0.7071068
# 9
# 0.8124038