我目前有以下格式的复数数据:
r1,i1,r2,i2,...
-1.74550E-0001,5.04828E-0002,7.37643E-0002,-1.70416E-0001,...
...
并且希望从这些复数的模数中创建新列,我尝试通过以下方式执行此操作:
data=read.table("umatrix.txt", header=T, sep=",")
for (i in 1:43){
data$paste("m",toString(i), sep = "") = sqrt((data$paste("r",toString(i), sep = "")^2)+(data$paste("i",toString(i), sep = "")^2))
}
但是这会得到错误:
错误:尝试应用非功能
大概是因为paste()不能以这种方式使用datatable $ column语法。如何实现这一目标?
编辑:没关系,使用其他语法修复,如下所示:
for (i in 1:43){
data[1:43,paste("m",toString(i), sep = "")] = sqrt((data[1:43,paste("r",toString(i), sep = "")]^2)+(data[1:43,paste("i",toString(i), sep = "")]^2))
}
答案 0 :(得分:3)
要提取列,您可以使用:
dat$column
或:
dat["column",] # Notice the "
paste
的结果是一个字符串,因此你需要使用第二种形式,即:
dat[paste(...),]
当您使用第一张表格时:
dat$paste(...)
R正在寻找一个名为dat$paste
的函数,该函数不存在,从而导致错误。
请注意,dat$column
实际上等于dat[["column"]]
。此表单将列提取为矢量。或者,dat["column",]
表单不会生成向量,而是带有一列的data.frame
。因此,最后一种形式也可用于提取多列:dat[c("a","b"),]