我有一个以编程方式构建的字符串
tot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10
我需要用两个单引号括起来(在字符串上没有双引号)并分配给一个对象mod
:
# this is what I want
mod <- '
tot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10
'
我试过了:
string <- "tot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10"
mod <- as.symbol(paste("'", string, "'", sep=" ")) # to try and remove the double quotes
但mod
包含在背景中
mod
`' tot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10 '`
如果有更多背景信息,请参阅我发布到help group of the package I am using的更详细的问题。我在SO上发布了一个更具体的问题,因为我已经将问题缩小到如何定义mod
对象。
如果我使用cat()
和readLines()
:
string <- paste("'", "tot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10", "'", sep=" ")
cat(string, file=paste0(string, ".lav"))
mod <- readLines(paste0(string, ".lav"))
但我不认为这是必要的。
答案 0 :(得分:1)
我认为你误解了R字符串语法。您描述的字符串是:
# this is what I want
mod <- '
tot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10
'
这与写作完全相同:
mod <- '\ntot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10\n'
或
mod <- "\ntot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10\n"
因此,对于您的问题,我认为运行就足够了:
string <- "tot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10"
mod <- paste0("\n", string, "\n")
如果您想输出没有封闭引号的最终模型,可以执行以下操作:
cat(mod)
#
# tot=~item1+item2+item3+item4+item5+item6+item7+item8+item9+item10
答案 1 :(得分:1)
生成数据:
set.seed(101)
dat.test <- do.call(data.frame,replicate(6,sample(1:10, 50, replace=TRUE),
simplify=FALSE))
names(dat.test) <- paste0("s1.item",1:6)
myList1 <- list(scale1.tot=paste0("s1.item",1:6),
scale1.sub1=paste0("s1.item",1:3),
scale1.sub2=paste0("s1.item",4:6))
我这里只制作了一个项目,但您也可以应用其中一个项目,另一个*apply
来电或for
循环......
这有效(虽然它会发出警告,因为数据很简单)
fitList <- mapply(function(lhs,rhs) {
mod <- paste(lhs,"=~",paste(rhs,collapse="+"))
cfa(mod,data=dat.test)
},
names(myList),myList)