Как повторить блок кода для выборки 2 значений в r?

(Я новичок в этом, поэтому теперь редактирую свой вопрос в качестве воспроизводимого примера).

Я рассмотрел функции начальной загрузки, цикла и репликации и не могу понять, как повторить серию шагов (а не только одну функцию) в R и сохранить результат в кадре данных. Мне нужно случайным образом выбрать 2 значения из пула из 22 значений 9 раз. Затем проведите тест ранговой корреляции Спирмена для этого набора данных (2 столбца, 9 строк) 10 000 раз и сохраните значение каждой из этих итераций. Поэтому мне нужно повторить эти шаги менее 10 000 раз и сохранить каждый результат ранга копейщика.

#For each isotope (C,N,S) obtain two samples of nine individuals extracted
#at random from the pool of the studied population, n = 22 nestlings) and 
#compare their isotopic values with a Spearman rank correlation. 

# take a random sample of size 2 (9 times) from a dataset mysample
# sample without replacement

c13 = c(-25.12, -20.95, -23.98, -23.78,-25.45, -26.27, -11.13, -12.75, -18.77, -18.38, -16.65,
        -16.96, -16.71, -19.57, -20, -23.19, -17.38, -17.83, -18.86, -18.71, -25.57, -21.9)

n15 = c(10.22, 12.64, 11.06, 10.81, 11.55, 11.28, 16.37, 16.17, 13.52, 13.83, 14.27, 14.07, 14.25, 13.09,
        12.59, 11.42, 13.97, 13.77, 14, 15.21, 11.73, 11.8)

s34 =c (4.61, 12.35, 5.19, 5.54, 5.2, 5.12, 14.42, 14.56,
        12.78, 13.11, 18.78, 18.71, 19.19, 11.58, 11.08, 7.89, 17.51, 17.34, 12.55, 12.65, 6.42, 8.49)

df = data.frame(c13,n15,s34)

#c13
mysample <- matrix(sample(c13, 18), ncol=2)
 
#mysample is a vector
is.atomic(mysample)
  
#Convert vector to a dataframe for correlation test.
mysample <- as.data.frame(mysample)
is.atomic(mysample)
 
#name columns
colnames(mysample) <- c ("siblingcarbon1", "siblingcarbon2")
 
#Conduct a Spearman rank correlation test on these randomly selected values 
cor.test(mysample$siblingcarbon1,mysample$siblingcarbon2, method="spearman")
  
# For c13 repeat the prior process 10,000 times and store Spearman rank value for each run (not sure how to do this)
    

person EMC    schedule 26.05.2017    source источник
comment
Легче помочь, если вы предоставите воспроизводимый пример с образцом данные, чтобы мы могли скопировать/вставить код в R, чтобы запустить его.   -  person MrFlick    schedule 26.05.2017
comment
Разве это не mysample, @MrFlick? Я думаю, чего не хватает EMC, так это ожидаемого результата. (EMC, что вы пробовали? Вы можете использовать replicate(n, { expr; }) или любой из sapply, lapply, apply и т. д., а также списки из фреймов данных. И для протокола: одна функция — это просто параметризованная последовательность шагов... с другими преимуществами программирования, такими как пространства имен, область действия и т. д.)   -  person r2evans    schedule 26.05.2017
comment
сделать это функцией?   -  person RobertMyles    schedule 26.05.2017
comment
@r2evans Откуда baea$C13? Кажется, я не могу это запустить.   -  person MrFlick    schedule 26.05.2017
comment
@MrFlick, хороший момент ... я предполагал (моя ошибка), что действительные образцы данных будут работать с любым набором чисел вместо этого, но вы правы, что EMC должна определить, как выглядит этот набор. .   -  person r2evans    schedule 26.05.2017


Ответы (1)


Обновите ответ на основе ваших правок:

c13 = c(-25.12, -20.95, -23.98, -23.78,-25.45, -26.27, -11.13, -12.75, -18.77, -18.38, -16.65, -16.96, -16.71, -19.57, -20, -23.19, -17.38, -17.83, -18.86, -18.71, -25.57, -21.9)
n15 = c(10.22, 12.64, 11.06, 10.81, 11.55, 11.28, 16.37, 16.17, 13.52, 13.83, 14.27, 14.07, 14.25, 13.09, 12.59, 11.42, 13.97, 13.77, 14, 15.21, 11.73, 11.8)
s34 =c (4.61, 12.35, 5.19, 5.54, 5.2, 5.12, 14.42, 14.56, 12.78, 13.11, 18.78, 18.71, 19.19, 11.58, 11.08, 7.89, 17.51, 17.34, 12.55, 12.65, 6.42, 8.49)
df = data.frame(c13,n15,s34)

#create a list to store your results
lst <- list()

#this statement does the repetition (looping)
for(i in 1:1000)
{

  mysample <- matrix(sample(c13, 18), ncol=2)
  #mysample is a vector 
  is.atomic(mysample)
  #Convert vector to a dataframe for correlation test. 
  mysample <- as.data.frame(mysample) 
  is.atomic(mysample)
  #name columns 
  colnames(mysample) <- c ("siblingcarbon1", "siblingcarbon2")
  #Conduct a Spearman rank correlation test on these randomly selected values 
  x <- cor.test(mysample$siblingcarbon1,mysample$siblingcarbon2, method="spearman")
  print(x$estimate)
  lst[i] <- x$estimate
}
str(lst)

Результаты будут сохранены в порядке запуска в lst. Запустил 10 раз (вместо 1000):

ул (первый)

List of 10
 $ : num -0.5
 $ : num -0.1
 $ : num 0.15
 $ : num -0.8
 $ : num 0.0167
 $ : num -0.617
 $ : num 0.183
 $ : num -0.617
 $ : num 0.2
 $ : num 0.05
person PhilC    schedule 26.05.2017
comment
Спасибо вам за помощь! Я обновил, чтобы включить данные, и попробовал код из PhilC. После просмотра lst с помощью str(lst) мне все еще не ясно, дает ли он мне список коэффициентов корреляции (rho)? - person EMC; 01.06.2017
comment
Пожалуйста, попробуйте обновленный код выше и отметьте его как ответ, если это необходимо. - person PhilC; 01.06.2017