0

我目前有以下形式的复数数据:

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))
}
4

1 回答 1

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"),]

于 2012-10-24T20:01:09.073 回答