从R(在SPSS中运行)传递值以打开SPSS数据集

时间:2012-06-05 04:36:28

标签: r spss

R这里全新。我在SPSS中运行R来解决SPSS数据集中的一些复杂多项式。我设法将R的结果反馈到SPSS,但这是一个非常不优雅的过程:

begin program R.
z  <- polyroot(unlist(spssdata.GetDataFromSPSS(variables=c("qE","qD","qC","qB","qA"),cases=1),use.names=FALSE))
otherVals <- spssdata.GetDataFromSPSS(variables=c("b0","b1","Lc","tInv","sR","c0","c1","N2","xBar","DVxSq"),cases=1)
b0<-unlist(otherVals["b0"],use.names=FALSE)
b1<-unlist(otherVals["b1"],use.names=FALSE)
Lc<-unlist(otherVals["Lc"],use.names=FALSE)
tInv<-unlist(otherVals["tInv"],use.names=FALSE)
sR<-unlist(otherVals["sR"],use.names=FALSE)
c0<-unlist(otherVals["c0"],use.names=FALSE)
c1<-unlist(otherVals["c1"],use.names=FALSE)
N2<-unlist(otherVals["N2"],use.names=FALSE)
xBar<-unlist(otherVals["xBar"],use.names=FALSE)
DVxSq<-unlist(otherVals["DVxSq"],use.names=FALSE)
z2 <- Re(z[abs(c(abs(b0+b1*Re(z)-tInv*sR*sqrt(1/(c0+c1*Re(z))^2+1/N2+(Re(z)-xBar)^2/DVxSq))-Lc))==min(abs(c(abs(b0+b1*Re(z)-tInv*sR*sqrt(1/(c0+c1*Re(z))^2+1/N2+(Re(z)-xBar)^2/DVxSq))-Lc)))])
varSpec1 <- c("Xd","Xd",0,"F8","scale")
dict <- spssdictionary.CreateSPSSDictionary(varSpec1)
spssdictionary.SetDictionaryToSPSS("results", dict)
new = data.frame(z2)
spssdata.SetDataToSPSS("results", new)
spssdictionary.EndDataStep( )
end program.

老实说,它主要是从一些相关的例子拼凑而成,看起来比它应该更复杂。我不得不采用R创建的新数据集,并使用原始数据集运行MATCH FILES。我想做的就是a)将数字从SPSS拉到R,b)操纵它们 - 在这种情况下,找到符合某些标准的多根 - 和c)将结果正确地放回到SPSS数据集中而不会弄乱任何以前的数据。

我错过了一些可以让这更简单的东西吗?请记住,我在这次尝试之外没有R经验,但我在编程SPSS和matlab方面有着不错的经验。

提前感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:2)

SPSS中的R可以创建新的SPSS数据集,但不能修改现有数据集。在很多情况下,来自R的数据在尺寸上与活动的SPSS数据集不一致。因此,您需要使用上面的api创建字典和数据框,然后在需要匹配时在SPSS端执行适当的操作。您可能希望在suggest@us.ibm.com上提交SPSS的增强请求