如果这是双重发布,请提前道歉,但我没有找到解决方案,我正在努力在这里工作(和学习) .
我正在尝试将我的代码更改为data.table方法而不是data.frame,因为速度优势因为我正在处理数百个具有每百万个值的测量文件 .
我无法弄清楚如何编写以下场景的代码:我的列的名称由2部分组成:通道和参数如:FWS.Maximum,FWS.Minimum
因为代码必须用于具有不同通道的仪器数据,所以我写它以便R自动找到通道部分然后用 lapply
循环它们 . 我在这里尝试做的是将Range计算为Channel.Maximum列 - channel.minimum列 .
df[, FWS.Range := (FWS.Maximum - FWS.Minimum)]
工作正常,但在循环中它看起来像这样:
x <- "FWS"
mydf[ , paste(x, "Range", sep = '.') := paste(x, "Maximum", sep = '.') - paste(x, "Minimum", sep = '.')]
但是会引发以下错误:
粘贴错误(x,“最大”,sep =“ . ”) - 粘贴(x,“最小”,sep =“ . ”):二元运算符的非数字参数
仅有5列的虚拟数据可以测试它(真实数据有几十个我需要根据这种风格调整)
mydf = data.table(ID = c(1,2,3,4,5), FWS.Maximum = c(12, 17,29, 22), FWS.Minimum = c(5,4,1,6),
FL.Red.Maximum = c(12, 17,29, 22), FL.Red.Minimum = c(5,4,1,6))
我试图让这个工作的代码是这样的:
lapply(substr(names(mydf)[grepl("Maximum", names(mydf))], 1, nchar(names(mydf)[grepl("Maximum", names(mydf))])-8), function(x) {
mydf[ paste(x, "Range", sep = '.'):= paste(x, "Maximum", sep = '.') - paste(x, "Minimum", sep = '.')] })
目前告诉我
错误:=(粘贴(x,“范围”,sep =“ . ”),粘贴(x,“最大”,sep =“ . ”) - :检查is.data.table(DT)== TRUE . 否则,:=和:=(...)被定义为仅在j中使用,一次且特定方式 . 请参阅help(“:=”) .
1 回答
感谢MichaelChirrico和Jaap的回答,以及我自己试图停止在控制台上打印: