将字符串分配给没有双引号的对象

时间:2013-12-24 16:10:21

标签: r

我有一个以编程方式构建的字符串

 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"))

但我不认为这是必要的。

2 个答案:

答案 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)