r - 创建一个包含每个文件名列表的第 N 个数字的数据表

标签 r data.table apply

我有一个包含大型模型输出的文件列表。
我使用以下方法将这些加载为数据表:

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/

相关文章:

r - 如何将seq()的功能扩展为list或dataframe?

r - 选择 R 中第一个值等于 "x"的组

r - data.table:满足条件后删除所有行

r - 根据具有特定(非字母)顺序的字符列对 data.table 进行排序

r - 对存储在字符向量中的每个数据帧名称应用函数

r - 提高 R 中删除每行重复值和移位值的效率

r - 使用 plot_ly 抑制工具提示中的默认文本

r - 在 R 中计算每日平均值

r - 在 Shiny 中导入和访问大型数据文件

r - 从数据框中的不同列组中选择前 n% 记录