这是Paste/Collapse in R的后续行动 我认为开始一个新问题比用新问题无休止地编辑上一个问题更好。
我发现的是一些我想要模拟玩游戏的向量。我们的目标是随机选择两种相互对抗的策略,然后制作结果矩阵,一个神奇的for循环将为每个策略分配一个分数。
###Sample Strategies
whales <- c("C","D","C","D","D")
quails <- c("D","D","D","D","D")
snails <- c("C", "C", "C", "C", "C")
bales <- c("D", "D", "C", "D", "C")
####Combining into a matrix
gameboard<-cbind(whales, quails, bales, snails, deparse.level = 1)
####All of the names of the strategies/columns
colnames(gameboard)
####Randomly pick two random column names
game1<- colnames(gameboard)[sample(1:ncol(gameboard), 2, replace= FALSE)]
results <-paste(game1[1], game1[2], sep='')
现在这确实有效,除了我实际访问的是列名,而不是列中的数据。所以当我想要CD DD CC DD DC的实际连接时,我最终会得到像'whalesbales'这样的结果。
也许'申请'或'lapply'......在这里申请?
不可避免的后续问题是我如何才能得到最后一行,其中“结果”代替“results_whalesVbales”? 因为我假设
results"game1[1]", sep='V',game1[2]"
不会削减它,并且有很多丑陋的方法可以用很多括号和块引号来做到这一点。
#关注
提前感谢您的建议。
感谢费迪南德的回应和详尽的解释 - 几个跟进:
(1)有没有办法获得 粘贴(.Last.value,collapse =“”) [1]“DC DD CC DD CD”
结果是一个基于
命名为result_balesVwhales的新对象(vector?) paste0("results_", paste(colnames(gameboard [randompair],collapse="V"))
[1] "results_balesVwhales"
到目前为止我尝试过的所有内容都使得vector的值为results_balesVwhales。
(2)我是否可以强制新的results_balesVwhales具有“长”(柱状)格式,每种格式都包含鲸鱼和鲸鱼,而不是重塑?
答案 0 :(得分:0)
费迪南德回答了第一个问题。关于你的第二个问题......你要问的功能是assign
。
x = 'foo'
assign(x, 2)
foo
# [1] 2
然而,有龙......相反,R的做法是分配到命名列表的元素中:
game1 <- sample(colnames(gameboard), 2)
result <- list()
list_name <- paste0("results_", paste(colnames(gameboard)[game1], collapse="V"))
result[[list_name]] <- paste(gameboard[, game1[1]],
gameboard[, game1[2]],
sep='',
collapse=' ')
如果你想要粘贴元素的向量,只需删除collapse
,就像我在下面所做的那样。
最后,一旦我整理出我希望这一切都能发挥作用,我会把它包装成一两个函数。这些可以更清洁,但详细说明了这个想法。
my_game <- function(trial, n_samples, dat) {
# as per my comment, generate the game result and name using the colnames directly
game <- sample(colnames(dat), n_samples)
list_name <- paste0("results_", paste(game, collapse="V"))
game_result <- paste(dat[, game[1]],
dat[, game[2]],
sep='')
# return both the name and the data in the format desired to parse out later
return(list(list_name, game_result))
}
my_game_wrapper <- function(trials, n_samples, dat) {
# for multiple trials we create a list of lists of the results and desired names
results <- lapply(1:trials, my_game, n_samples, dat)
# extract the names and data
result_names <- sapply(results, '[', 1)
result_values <- sapply(results, '[', 2)
# and return them once the list is pretty.
names(result_values) <- result_names
return(result_values)
}
my_game_wrapper(3, 2, gameboard)
# $results_quailsVwhales
# [1] "DC" "DD" "DC" "DD" "DD"
# $results_quailsVbales
# [1] "DD" "DD" "DC" "DD" "DC"
# $results_balesVquails
# [1] "DD" "DD" "CD" "DD" "CD"