我有一个包含大型模型输出的文件列表。
我使用以下方法将这些加载为数据表:
files <- list.files(path.expand("/XYZ/"), pattern = ".*\\.rds", full.names = TRUE)
dt<- as.data.table(files)
这个数据表“dt”只有 1 列,即文件名。
例如 XZY_00_34234.rds
每个文件名的第 50 个和第 51 个字符是一个数字。
我想为每个文件创建一个包含该 2 位数字的数据表。
我用了:
index <- as.data.table(as.integer(substr(dt,50,51)))
这给了我第一个文件的正确值。
我想我应该能够使用 apply 对文件的每一行运行它
我试过:
integers <- as.data.table(apply(dt,1,as.integer(substr(50,51))))
但是得到:
substr(50, 51) 中的错误:缺少参数“stop”,没有默认值
任何建议感激地接受!
最佳答案
尝试:
integers <- as.data.table(apply(dt, 1, function(x) as.integer(substr(x, 50, 51))))
apply
函数族接受其他函数并在向量和数组上执行它们。这些函数有时已经定义,但一个有趣的特性被添加到 apply
函数,您可以第一次在行中编写函数。这样可以节省时间和击键次数。更窄的编程设置需要首先编写您的函数,如下所示:
fiftieth_char <- function(x) {
as.integer(substr(x, 50, 51))
}
接下来,可以将该函数传递给
apply
功能。apply(dt, 1, fiftieth_char)
但是看看我们是如何将这两个步骤合二为一的。
关于r - 创建一个包含每个文件名列表的第 N 个数字的数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30721684/