r - 数据框或矩阵的 R 对象的泛化

标签 r matrix dataframe

我有几个问题与编写可以同时处理矩阵和 data.frames 的函数有关。想象一下例如:

DoubleThatThing <- function(thing) {
   stopifnot(is.matrix(thing) | is.data.frame(thing))
   2 * thing
}

我的问题是:

  1. 对于矩阵或 data.frame 对象是否有通用术语?用于替换 DoubleThatThing 中的 Thing 的东西。

  2. thing 是否有普遍接受或广泛使用的变量名称?

  3. is.matrix(thing) | is.data.frame(thing) 是测试此类对象的最佳方法吗?

最佳答案

我不确定这是否对您有帮助,或者是否能满足您的需求。但是为什么不声明一个泛型方法并为matrixdata.frame 定义方法呢?这是一个虚拟/愚蠢的例子:

# generic method
my_fun <- function(x, ...) {
    UseMethod("my_fun", x)
}

# default action
my_fun.default <- function(x, ...) {
    cx <- class(x)
    stop(paste("No method defined for class", cx))
}

# method for object of class data.frame
my_fun.data.frame <- function(x, ...) {
    print("in data.frame")
    tapply(x[,1], x[,2], sum)
}

# method for object of class matrix
my_fun.matrix <- function(x, ...) {
    print("in matrix")
    my_fun(as.data.frame(x))
}

# dummy example
df <- data.frame(x=1:5, y=c(1,1,1,2,2))
mm <- as.matrix(df)

> my_fun(df)
# [1] "in data.frame"
# 1 2 
# 6 9 

> my_fun(mm)
# [1] "in matrix"
# [1] "in data.frame"
# 1 2 
# 6 9 

> my_fun(as.list(df))
# Error in my_fun.default(as.list(df)) : No method defined for class list

关于r - 数据框或矩阵的 R 对象的泛化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557513/

相关文章:

r testthat 和 covr 在非包库中的使用

r - 我如何告诉 dplyr 中的 select() 它看到的字符串是数据框中的列名

sorting - F# - 对包含元组的矩阵进行排序

python - 根据行值合并 Pandas 数据框

Python Pandas 数据框行条目无法按条件进行比较

r - plotly 中 plot_geo 函数的悬停文本

r - 如何在 R 中使用 plotly

c++ - 接口(interface)方法的实现

python - 使用 Python 删除矩阵中的第 n 行或第 n 列

python - Pandas 选择具有特定条件的数据