R - 如何评估文本字符串

时间:2016-02-20 12:38:57

标签: r dataframe

我对R来说很陌生并且未能回答问题。问题是,我怎样才能告诉R将字符串值作为代码的一部分处理,以SAS resolve()函数的方式进行?

说,我有一个包含数字列V1,...,Vn和n行的数据框。我想总结所有对角线'元素V = V1 [1] + V2 [2] ... + Vn [n]但是n足够大于手动求和(下面,为简单起见,n = 2)。

我试图把字符串" dat $ V1 [1]"," dat $ V2 [2]"在字符C中然后提取相应的数值(全部在循环步骤中):

> dat <- data.frame(V1 = c(2,3), V2 = c(7,11))
> dat
    V1 V2
  1  2  7
  2  3 11

V = 0
for(i in 1:nrow(dat))
{
  C = paste('dat$V',format(i,trim=TRUE),'[',format(i,trim=TRUE),']', 
            sep="" )
  f = Xfun(C) 
  V = V + f
}

应该使用什么代替Xfun?我已经尝试了as.formula(),asOneSidedFormula(),get(&#34; ...&#34;)和其他一些,但dat $ V1不是一个对象是必不可少的:

> exists("dat")
[1] TRUE
> exists("dat$V1")
[1] FALSE

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果您只想对方形矩阵的对角元素求和,只需执行

edge_pen_width

如果要评估R中的文本字符串,请在eval上读取一下或在R中执行dat <- data.frame(V1 = c(2,3), V2 = c(7,11)) sum(diag(as.matrix(dat)))

对于您的问题,您可以这样做:

? eavl

答案 1 :(得分:0)

最终确定:

a)使用文本解析和评估的正确答案

V = 0
for(i in 1:nrow(dat))
{ C = paste('dat$V',as.character(i),'[',as.character(i),']', 
            sep='' )
  V = V + eval(parse(text=C))
}

b)特别针对数据框采取正确行动 - 无需文本评估,但直接按名称寻址数据框列

V = 0
for(i in 1:nrow(dat))
{ col = paste('V',as.character(i),
              sep='')
  V = V + dat[i,col]
}