我对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
非常感谢您的帮助。
答案 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]
}