Nube在这里尝试学习R .. 我有一个数据框,正在尝试以编程方式从某些列构造矩阵。在语法上花了很长时间。
Here is the df dataframe
我不知道提前多少行,但是ZL术语与XL变量的编号相同,并且ZL变量的列与YL变量的行一样多。所有这些都导致了一个简单的2D插值算法,我正在尝试构建查找矩阵。
代码像这样
df <-read.csv(dfname)
xl <-eval(parse(text =(paste(“ na.omit(df $ XL”,TYPE,“)”,sep =“”)))))
Nxl <-length(na.omit(xl))
yl <-eval(parse(text =(paste(“ na.omit(df $ YL”,TYPE,“)”,sep =“”)))))
Nyl <-length(na.omit(yl))
上面的代码为TYPE =“ 1BP2”产生
类型
“ 1BP2”
Nxl
7
奈尔
3
l
1 2 3 4 5 6 7
attr(,“ na.action”)
attr(,“ class”)
“忽略”
yl
10 20 30
attr(,“ na.action”)
4 5 6 7 8
attr(,“ class”)
“忽略”
这可行,但笨重...(打印语句以帮助调试)
对于(i在1:Nyl中){
print(parse(text =(paste(“ na.omit(df $ ZL”,i,TYPE,“)”,sep =“”)))))
zl <-eval(parse(text =(paste(“ na.omit(df $ ZL”,i,TYPE,“)”,sep =“”)))))
打印(zl)
if(i == 1){zo <-matrix(zl,nrow = Nxl,byrow = FALSE)}
else {zo <-matrix(c(zo,zl),nrow = Nxl,byrow = FALSE)}
打印(zo)
}
生产...
表达式(na.omit(df $ ZL11BP2))
100200300400500600700
attr(,“ na.action”)
8
attr(,“ class”)
[,1]
[1] 100
[2,] 200
[3,] 300
[4,] 400
[5,] 500
[6,] 600
[7,] 700
表达式(na.omit(df $ ZL21BP2))
2003006009001200120015001800
attr(,“ na.action”)
8
attr(,“ class”)
“忽略”
[,1] [,2]
[1] 100200
[2,] 200300
[3,] 300600
[4,] 400900
[5,] 500 1200
[6,] 600 1500
[7,] 700 1800
表达式(na.omit(df $ ZL31BP2))
300400 1000 1600 2200 2800 3400
attr(,“ na.action”)
1 8
attr(,“ class”)
“忽略”
[,1] [,2] [,3]
[1,] 100200300
[2,] 200300400
[3,] 3006001000
[4,] 4009001600
[5,] 500 1200 2200
[6,] 600 1500 2800
[7,] 700 1800 3400
这是我优雅地尝试在1行中完成的尝试,但是没有用...
zo = matrix(c(eval(parse(text =(paste(“ na.omit(df $ ZL”,i = 1:Nyl,TYPE,“)”,sep =“”)))))),ncol = Nyl ,byrow = FALSE)
结果是...
警告信息:
在矩阵中(c(eval(parse(text =(paste(“ na.omit(df $ ZL”,i = 1:Nyl,:
数据长度[7]不是行数[4]的约数或倍数
佐
[,1] [,2]
[1] 200 1200
[2,] 300 1500
[3,] 600 1800
[4,] 900200
当我尝试通过分段查看来调试1个班轮时...
paste(“ na.omit(df $ ZL”,i = 1:Nyl,TYPE,“)”,sep =“”)
产生
“ na.omit(df $ ZL11BP2)”“ na.omit(df $ ZL21BP2)”
parse(text =(paste(“ na.omit(df $ ZL”,i = 1:Nyl,TYPE,“)”,sep =“”)))
产生
表达式(na.omit(df $ ZL11BP2),na.omit(df $ ZL21BP2))
但是事情似乎往南走
c(eval(parse(text =(paste(“ na.omit(df $ ZL”,i = 1:Nyl,TYPE,“)”,sep =“”))))))
产生
2003006009001200120015001800
我希望的是,我以为我正在执行这个
c(na.omit(df $ ZL11BP2),na.omit(df $ ZL21BP2),na.omit(df $ ZL31BP2))
产生我想要的...
100200300400500600600700200300600900 1200 1500 1800 300400 1000 1600 2200 2800 3400
我缺少或不了解的内容
谢谢