1

我不知道我是否是个白痴,但我正在尝试使用 do.call() 将参数传递给 lavaan cfa() 函数。我已经用其他函数成功地做到了这一点,但在这种情况下,参数是混合的——即第一个是字符串,第二个是 data.frame,第三个是字符串。举个简单的例子:

require(lavaan)

#simulating data
t <- rnorm(100,0,.8)
y1 <- t + rnorm(100,0,.2)
y2 <- t + rnorm(100,0,.2)
y3 <- t + rnorm(100,0,.2)
g <- c(0,1)
data <- data.frame(y1,y2,y3,g)

#setting up the lavaan model
model <- 'f1 =~ y1 + y2 + y3'

现在只需使用这些参数就可以了

cfa(model,data,group='g')

但是当我尝试使用 do.call()

args <- list(model=model,data=data,group='g')
do.call(cfa,args)

我收到此错误消息:

Error in as.character(mc[[1L]]) : 
cannot coerce type 'closure' to vector of type 'character'

我尝试使用substitute()、引号的任意组合和do.call() 的quote-Argument,但都无济于事。因为我想将它用于某种迷你包,所以我想避免使用任何其他包,而宁愿只使用基本功能。这可能吗?

任何帮助将不胜感激!

最好的,马丁

4

1 回答 1

2

do.call期望它的第一个参数是函数的“名称”。通常,如果将其输入为 R 符号(不带引号的表达式)或表示为单个元素字符值,则它会起作用。在这种情况下cfa,是一个包装器,lavaan函数名称被转换为一个名为“model.type”的列表元素,当它是字符值时成功,但当它是函数的 R 符号名时则不成功。

> do.call('cfa',args)
lavaan (0.5-15) converged normally after  56 iterations

  Number of observations per group         
  0                                                 50
  1                                                 50

  Estimator                                         ML
  Minimum Function Test Statistic                0.000
  Degrees of freedom                                 0
  P-value (Chi-square)                           0.000

Chi-square for each group:

  0                                              0.000
  1                                              0.000
于 2014-02-28T17:54:20.297 回答