Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何迭代数据表中的列对以在R中创建新列_R_Loops_Paste_Complex Numbers - Fatal编程技术网

如何迭代数据表中的列对以在R中创建新列

如何迭代数据表中的列对以在R中创建新列,r,loops,paste,complex-numbers,R,Loops,Paste,Complex Numbers,我目前有以下形式的复数数据: 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$pa

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

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$列语法一起使用。如何做到这一点

EDIT:Nevermind,使用其他语法修复,如下所示:

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

要提取列,您可以使用:

dat$column
或:

粘贴的结果是一个字符串,因此需要使用第二种形式,即:

dat[paste(...),]
当您像以前一样使用第一个表单时:

dat$paste(...)
R正在寻找一个名为
dat$paste
的函数,该函数不存在,导致错误


请注意,
dat$column
实际上等于
dat[[“column”]]
。此表单将列提取为向量。或者,
dat[“column”,]
表单生成的不是一个向量,而是一个带有一列的
data.frame
。最后一种形式也可用于提取多列:
dat[c(“a”、“b”),]
要提取一列,您可以使用:

dat$column
或:

粘贴的结果是一个字符串,因此需要使用第二种形式,即:

dat[paste(...),]
当您像以前一样使用第一个表单时:

dat$paste(...)
R正在寻找一个名为
dat$paste
的函数,该函数不存在,导致错误


请注意,
dat$column
实际上等于
dat[[“column”]]
。此表单将列提取为向量。或者,
dat[“column”,]
表单生成的不是一个向量,而是一个带有一列的
data.frame
。最后一个表单也可以用来提取多个列:
dat[c(“a”,“b”),]

我现在没有时间完全解析它,但是你可以尝试通过
[
intead of
$
进行索引。谢谢,这确实有效。奇怪的是有这么大的差异。很难搜索
[[
$
关于StackOverflow,但是最近有很多不同的问题,几乎都是常见问题。关于您的数据结构,我会将所有实部和虚部放在一列中,可能还有一个额外的标识列。这样就不需要循环了,您可以使用
mod=使用(data,sqrt(r^2)+(i^2))
。我现在没有时间完全解析它,但您可以尝试通过
[
链接
$
进行索引。谢谢,这确实有效。奇怪的是有这么大的差异。很难搜索
[[
$
关于StackOverflow,但是最近有很多不同的问题,几乎都是常见问题。关于您的数据结构,我会将所有实部和虚部放在一列中,可能还有一个额外的标识列。这样就不需要循环了,您可以使用
mod=带有(数据,sqrt(r^2)+(i^2))