通过在R中对每个元素应用函数,如何将列联表映射到另一个表?

ipa*_*wan 3 r transformation matrix

我在R中有一个2D列联表; 它是一个表对象.我想通过在每个元素上应用函数将其转换为新表.我查看了sapply,tapply等,但它们都旨在总结/汇总数据.我已经编写了自己的映射函数来执行此操作,我将在下面重现:

map.table = function(t,fn)
{
    rows = dim(t)[1]
    columns = dim(t)[2]
    x = matrix(nrow=rows, ncol=columns)

    rownames(x) = unlist(dimnames(bush.t)[1], use.names=FALSE)
    colnames(x) = unlist(dimnames(bush.t)[2], use.names=FALSE)
    for(row in seq(from=1, to=rows))
    {
        for(column in seq(from=1, to=columns))
        {
            x[row,column] = fn(t[row,column])
        }
    }
    as.table(x)
}
Run Code Online (Sandbox Code Playgroud)

这将从头开始创建矩阵,填充维名称和元素.有没有更好的方法呢?是否有R功能/包已经具备此功能?

Jos*_*ich 5

您可以使用apply:

set.seed(21)
x <- data.frame(a=sample(letters[1:5],20,TRUE),
                b=sample(letters[1:5],20,TRUE))
y <- table(x)
z <- as.table(apply(y, 1:2, sqrt))
Run Code Online (Sandbox Code Playgroud)