在标准函数式编程中,Map
接受一个列表l
和一个函数F
,并返回一个F
应用于每个元素的新列表。例如,考虑:
F(x) = x^2 and the list l = [1, 2, 3, 4, 5]
Map(f, l)
将产生列表:[1, 4, 9, 16, 25]
我想Map
在 R 数据帧上使用这个概念。我希望我的函数F(x)
能够计算x / rowSum(row that x belongs to in the dataframe).
考虑由以下给出的数据框:
df <- data.frame()
for(i in 1:5)
{
df <- rbind(df, c(i, i+1, i+2, i+3, i+4))
}
colnames(df) <- c("a", "b", "c", "d", "e")
这使:
a b c d e
1 1 2 3 4 5
2 2 3 4 5 6
3 3 4 5 6 7
4 4 5 6 7 8
5 5 6 7 8 9
我想Map(F, df)
制作:
[,1] [,2] [,3] [,4] [,5]
v1 0.06666667 0.1333333 0.2 0.2666667 0.3333333
v2 0.10000000 0.1500000 0.2 0.2500000 0.3000000
v3 0.12000000 0.1600000 0.2 0.2400000 0.2800000
v4 0.13333333 0.1666667 0.2 0.2333333 0.2666667
v5 0.14285714 0.1714286 0.2 0.2285714 0.2571429
这是一个数据框,F
适用x
于df
.
唯一困难的部分是弄清楚如何写 F:
F <- function(x) x / rowSum( row in which x belongs to in dataframe)
Map(F, df)
- 我该怎么写
F
编辑这是一个迭代解决方案:
pStat <- data.frame()
for(i in 1: 5)
{
v <- df[i,] / rowSums(df[i,])
pStates <- rbind(pStates, v)
}