这是我试图运行的代码:
data_table<-data_table%>%
merge(new_table, by = 'Sample ID')%>%
mutate(Normalized_value = ((1.8^(data_table$Ubb - data_table$Ct_adj))*10000))
我想首先从"new_table“中添加新列("Ubb"),然后使用该新列添加一个计算列。但是,我收到一个错误,说明Ubb列不存在。所以它没有在运行变异之前执行合并?当我将函数分开时,一切都很好:
data_table<-data_table%>%
merge(new_table, by = 'Sample ID')
data_table<-data_table%>%
mutate(Normalized_value = ((1.8^(data_table$Ubb - data_table$Ct_adj))*10000))
我想保持所有的东西在一起只是为了风格,但我也只是好奇,难道R不应该先执行合并,然后变异吗?管道运行的顺序是如何工作的?
谢谢!
发布于 2022-05-03 12:05:47
您不需要引用带有$
符号的列名。即使用Normalized_value = ((1.8^(Ubb - Ct_adj))*10000)
,因为它现在被合并了。有了$
符号,我相信R,即使合并,有原始的data_table仍然在内存中。因为赋值运算符还没有工作。任务将在所有操作完成后进行。
发布于 2022-05-03 12:06:02
试着像这样运行代码:
data_table<-data_table%>%
merge(new_table, by = 'Sample ID')%>%
mutate(Normalized_value = ((1.8^(Ubb - Ct_adj))*10000))
注意,我没有在管道中使用带有$
的表名。您的方法是告诉变异列查看向量。也许它在理解合并时的向量长度有一些困难。只需在管道中调用变量名即可。最容易将%>%
看作‘然后’:data_table()
,然后是merge()
,然后是mutate()
。您还可以考虑使用left_join
而不是merge
。
https://stackoverflow.com/questions/72104767
复制