更干净地修改 R 中数据框中的列 - 可能使用 with() 或 apply()?

Mit*_*ops 1 coding-style r apply

我理解 R 中重复事物的答案通常是“ apply()”而不是循环。对于我经常创建的一些讨厌的代码,是否有更好的 R 设计模式?

因此,从 HTML 中提取表格数据,我通常需要更改数据类型,并最终运行这样的东西,将第一列转换为日期格式(从十进制),并将第 2-4 列从带有逗号千位分隔符的字符串转换为比如“2,400,000”到数字“2400000”。

X[,1] <- decYY2YY(as.numeric(X[,1]))
X[,2] <- as.numeric(gsub(",", "", X[,2]))
X[,3] <- as.numeric(gsub(",", "", X[,3]))
X[,4] <- as.numeric(gsub(",", "", X[,4]))
Run Code Online (Sandbox Code Playgroud)

我不喜欢在这里的左侧和骑行侧都有 X[,number] 重复,或者我对 2-4 重复了基本相同的语句。

是否有一种非常 R 风格的方法可以使 X[,2] 减少重复但仍然无循环?某种说法是“将其应用于第 2、3、4 列——一个将当前列重新分配给适当修改版本的函数?”

我不想创建一个完整的、可重复的清洁功能,真的,只是一个快速的匿名功能,可以减少重复。

Edu*_*oni 5

假设 X 是一个数据框,我会这样做:

X[2:4] <- lapply(X[2:4], function (x) as.numeric(gsub(",", "", x)))
Run Code Online (Sandbox Code Playgroud)